Способы открытия файла TXT на запись
5 (1)
Способы открытия файла TXT на запись ( Andrew01 22.07.2013 08:34 )
5(1)Доброе время суток!
есть код:
import Bankinter,rslx,ro,doctor,CurrInter, rsexts; k_server = "\\\\192.168.2.5"; k_base = "\\BMK\\kb\\data"; dat1=date(); getdate(dat1,"Введите дату"); //np=100; datesplit(dat1,dd,mm,yyyy); if (strlen(string(dd))<2) dds="0"+string(dd); else dds=string(dd);end; if (strlen(string(mm))<2) mms="0"+string(mm); else mms=string(mm);end; ob = TDirList (k_server + k_base + yyyy + "\\ARX\\" + "*"+mms+dds+".txt","f"); ob.Sort (0); j = 0; delfile (k_server + k_base + yyyy + "\\ARX\\" + "_1.txt"); file full(k_server + k_base + yyyy + "\\ARX\\" + "_1.txt") txt write; file input()txt; while(j<ob.Count) copyfile(k_server + k_base + yyyy + "\\ARX\\" + ob.name (j),ob.name (j)); open(input,ob.Name(j)); //[# ] (ob.Name(j)); //msgbox(ob.name(j)); rewind(input); while (next(input)) [#](input.str); insert(full,input.str); end; close(input); removefile(ob.name(j)); j=j+1; end;
в строке 20 выдает ошибку, требуется ")".
Если делаю
file full("\\\\192.168.2.5\\BMK\\kb\\data2013\\ARX\\_1.txt") txt write;
то ошибок нет, но хотелось бы динамику в макросе, т.е. в следующем году макрос надо переделывать и так из года в год.
Можно ли каким то способом обойти это? есть ли какие то другие функции открытия на запись тестового файла?
>> ОтветитьЯ использовал обходной путь ( OldFox 22.07.2013 10:10 )
5(1)Использовать в цикле по списку файлов конструкцию:
SetOutput ( ob.Name(j) /*[, TRUE]*/)
println(insert.str);
SetOutPut(NULL,TRUE);
>> ОтветитьА если попробовать так... ( coperius 22.07.2013 10:44 )
5(1)Большое спасибо, помогло, но ... ( Andrew01 22.07.2013 12:00 )
5(1)SetOutput ( ob.Name(j) /*[, TRUE]*/) надо будет запомнить, изучить и воспользоваться.
Что взять с новичка!)) Спасибо!
>> Ответить
попробуйте TStreamDoc ( Sergey V. Mamaev 22.07.2013 11:43 )
5(1)данный класс описан в документации Проблемно-ориентированный язык RSL
>> Ответитьхотя не понятно ( Sergey V. Mamaev 22.07.2013 11:52 )
5(1)что вам мешает с full поступить так же, как с input? то есть объявить пустым, потом опеном нужное имя файла
>> ОтветитьOpen(txtfile,filename) ( yukson 25.07.2013 13:40 )
5(1)file txtfile() txt write;
Open(txtfile, "\\\\server1\\d$\\PTKPSD\\Post\\ied\\"+lFilename);
>> ОтветитьСпасибо всем кто отзвался, вы мне очень помогли! ( Andrew01 30.07.2013 09:07 )
5(1)Not specified
>> Ответить[хелп ми ( noob 23.10.2013 05:34 )
5(1)помогите плиз надо в rsl rs-bank 5.5 сделать программу которая создат файл , его же импортирует на запись затем запрашивает ввести текст с последующим сохранением.
>> Ответитьэммм ( Sergey V. Mamaev 23.10.2013 08:50 )
5(1)file blabla("..\\txtfile\\somefile.txt") txt append; var s; if(getstring(s,"enter some string?")) blabla.str=s; insert(blabla); close(blabla); end;
вроде всё.. хотя я не совсем понимаю фразу "импортирует на запись"
>> Ответитьспс большое ты очень помог. ( noob 23.10.2013 09:32 )
5(1)но у меня еще одна проблемка есть
надо вывести эементы массива через запятую.
п.с.элементы вводить с клавы. тип элементов строковый
>> Ответитьхелп ( noob 23.10.2013 09:34 )
5(1)но у меня еще одна проблемка есть
надо вывести эементы массива через запятую.
п.с.элементы вводить с клавы. тип элементов строковый
>> Ответитьхелп ! сдать нужно к сегодняшнему дню. ( noob 23.10.2013 09:40 )
5(1)надо вывести эементы массива через запятую.
п.с.элементы вводить с клавы. тип элементов строковый
>> Ответитьесть что-то похожее ( Sergey V. Mamaev 23.10.2013 10:11 )
5(1)есть что-то похожее, но перерабатывайте уж сами (как минимум вместо "\n" ставьте ",")macro kbcaIsTArray(s) return IsEqClass("TArray",s); end; macro debugbox var s,i,c,b,ai,n; if(not(kbcaNoDebug)) if(kbcaOverDebug) i=0;s="";b=""; while(getparm(i,c)) if(kbcaIsArray(c)) ai=0; while(valtype(c[ai])) if(ai==0) if(kbcaIsTArray(c)) s=s+b+"TArray["+c.size+"]: [";b=""; else s=s+b+"array: [";b=""; end; end; s=s+b+"["+ai+"] "+string(c[ai]); b="\n"; ai=ai+1; end; s=s+"] :TArray"; elif(valtype(c)==v_date) s=s+b+string(c:o); b="\n"; elif((valtype(c)==v_numeric)or(valtype(c)==v_money)) s=s+b+string(c:0:4); b="\n"; elif(kbcaIsBTR(c)) n=genclassname(c); s=s+b+n+": ["+kbcaListRecord(c,true,"=")+"] :"+n; b="\n"; elif(valtype(c)!=0) if(c==null) s=s+b+"NULL"; else s=s+b+string(c); end; b="\n"; else s=s+b+"NULL"; b="\n"; end; i=i+1; end; msgbox("Сообщение отладки:|"+s); end; end; end;
параметров можно сколько угодно передавать; массивы тоже можно в качестве параметра (всё выводится). вместо msgbox сделайте println.. первые две проверки можете вырезать (вроде бы)
>> Ответитьспс но ( noob 23.10.2013 10:14 )
5(1)а можно не громоздко? используя просто конструкции рсл. без лишних классов?
>> Ответитьпомогите плиз только начал изучать ( noob 23.10.2013 10:26 )
5(1)можно это как-нибудь прописать коротко и ясно?
>> Ответитьвыдает ошибку ( noob 23.10.2013 10:42 )
5(1)неопределеный идентификатор kbcanodebug kbca...
>> Ответить
средствами RSL ( Sergey V. Mamaev 23.10.2013 10:41 )
5(1)средствами RSL вам выведет просто "Object TArray"
если вам только массивы нужны:var a=tarray; macro m(c); var s="",i,b="",ai,n; ai=0; while(valtype(c[ai])) s=s+b+string(c[ai]); b=","; ai=ai+1; end; s=s+""; return s; end; a[a.size]=12; a[a.size]=13; a[a.size]=19; msgbox(m(a));
не совсем "красиво", но работает
>> Ответитьспс ( noob 23.10.2013 10:43 )
5(1)а можете органидзовать ввод элементов с клавы? практикуюсь на рс-банке 5.5
>> Ответитьоответьте пожаалуйста ( noob 23.10.2013 10:54 )
5(1)ввод элементов мне нужно с клавы. и вывести через запятую каждый символ
>> Ответитьввод ( Sergey V. Mamaev 23.10.2013 10:55 )
5(1)ввод в документации, смотря что надо: getstring, getint, getmoney, getdate, gettrue, getdouble
общее у них: в первом параметре указывается значение "по умолчанию", вторым - сопроводительный текст
возвращают все, кроме gettrue -- false, если был нажат esc
gettrue возвращается выбранное значение
>> Ответитьgetstring ( noob 23.10.2013 10:56 )
5(1)getstring
>> Ответитьну? ( Sergey V. Mamaev 23.10.2013 10:59 )
5(1)var s="qwe"; // значение по умолчанию if(getstring(s,"мне чота нада!")) // работаем дальше else exit(1); // не работаем дальше end;
>> Ответитьвот так имеету ввиду? ( noob 23.10.2013 11:04 )
5(1)var a=tarray;
macro m(c);
var s="",i,b="",ai,n;
ai=0;
if (getstring(s,""))
while(valtype(c[ai]))
s=s+b+string(c[ai]);
b=",";
ai=ai+1;
end;
s=s+"";
return s;
end;
getstring(s,"введите сплошной текст");
a[a.size]=12;
a[a.size]=34;
a[a.size]=6;
println(m(a));
else exit(1)
end.
>> Ответитьмне надо чтоб ( noob 23.10.2013 11:13 )
5(1)var a=tarray;
macro m(c);
var s="",i,b="",ai,n;
ai=0;
getstring(s,"введите сплошной текст");
while(valtype(c[ai]))
s=s+b+string(c[ai]);
b=",";
ai=ai+1;
end;
s=s+"";
return s;
end;
a[a.size]=12; мне надо чтоб не присваивать определенные цифры а ввод с клавы строку и чтоб 1 символ присваивал первому элементу массива и тэ дэ. и между ниими запятые
a[a.size]=34;
a[a.size]=6;
println(m(a));
end.
>> Ответитьну помогите плиз, не пропадайте ( noob 23.10.2013 11:26 )
5(1)программа вывода элементов массива через запятую. используя getstring
>> Ответитьне совсем понятно, getstring это ввод, а вывод это либо: ( Andrew01 24.10.2013 09:44 )
5(1)если массив то
array a;
a[0] = "Пример";
getsring(a[0]);//это ввод
println(a[0]);//это уже вывод введенного ранее
в RSL можно вводить какую то команду, например туже getstring, потом встать на нее курсором и нажать CTRL + F1
и выведется справка по этой команде.
если вывод через запятую, посмотри setdelim.
>> Ответитьчто тебе мешает? ( Andrew01 24.10.2013 10:01 )
5(1)мне надо чтоб не присваивать определенные цифры а ввод с клавы строку и чтоб 1 символ присваивал первому элементу массива и тэ дэ. и между ниими запятые
i = 0;//счетчик a[0]=12; getstring(a[0]); a[1]=34; getstring(a[1]); a[2]=6; getstring(a[2]); if (next(i)) print(a[i]+","); end;
хотя тоже можно автоматизировать процесс ввода цыфр в массив, только нужен диапазон ввода и инструкция while
>> Ответитьхотя если ввод цыфр, нужно пользоваться getint, getstring это ввод строки. ( Andrew01 24.10.2013 10:07 )
5(1)Not specified
>> Ответить