Привет всем!!
Написал я программу, для обработки текстового файла. Впринципе все работает, но я пошел длинным и туповатым путем..
Вот она:
program ZachUBS;
uses Dos;
var
y, m, d1, dow : Word; {Переменные даты}
j:integer; i:byte; pr,pr1:string;
s_r,s_e,s_r2,s_e2,s_r3,s_e3,s,d:string;
k:byte absolute s;
rez,f,g,in_ubs,out_ubs:Text;
num:string[10];{порядковый в исх.файле}
probel:string[10]; probel1:string[5]; probel2:string[8];
probel3:string[3]; probel4:string[2]; probel5:string[7];
probel6:string[11];{пробелы}
fam:string[12]; nam:string[13];
och:string[15]; s_pas:string[5];
n_pas:string[6]; kem_pas:string[43];
date_pas:string[11]; date_r:string[10];
addres:string[50];{Данные держателя карты}
begin
{*************Соответствие букв кирилицы к латинским***************}
{ Одному символу кириллицы соответствует один символ латиницы }
s_r:=' АБВГДЕЗИЙКЛМНОПРСТУФХЦЪЫЬЭабвгдезийклмно
прстуфхцъыьэ';
s_e:='ABVGDEZIIKLMNOPRSTUFHC_Y_Eabvgdeziiklmnoprstufhc_y_e';
{ Одному символу кириллицы соответствует два символа латиницы }
s_r2:='ЁЖЧШЮЯёжчшюя';
s_e2:='YOZHCHSHYUYAyozhchshyuya';
{ Одному символу кириллицы соответствует четыре символа латиницы }
s_r3:='Щщ';
s_e3:='SHCHshch';
{**************Первый вход, формирование необходимых колонок
для перекодировки****************************}
Assign(in_ubs, 'C:ubs_openspis_in.txt');
Reset(in_ubs);
Assign(out_ubs, 'C:ubs_openspis_out.txt');
ReWrite(out_ubs);
WHILE NOT Eof(in_ubs) DO
begin
ReadLn(in_ubs,num,fam,probel,nam);
Writeln(out_ubs,'"',fam,'",','"',nam);
end;
Close(in_ubs);
Close(out_ubs);
{**********************Перекодировка*******************************
**}
if (ParamCount>0) then
begin
s:=ParamStr(1);
if (UpCase(s[2])='S') then
begin
s_r:=s_r+' ';
s_e:=s_e+'_';
end;
end;
assign(out_ubs,'C:ubs_openspis_out.txt');
reset(out_ubs);
assign(g,'C:ubs_openresult.txt');
rewrite(g);
while not eof(out_ubs) do
begin
readln(out_ubs,s); d:='';
for i:=1 to k do
if Pos(s[i],s_r)>0 then
d:=d+s_e[Pos(s[i],s_r)]
else if Pos(s[i],s_r2)>0 then
d:=d+copy(s_e2,1+2*(Pos(s[i],s_r2)-1),2)
else if Pos(s[i],s_r3)>0 then
d:=d+copy(s_e3,1+4*(Pos(s[i],s_r3)-1),4)
else d:=d+s[i];
writeln(g,d);
end;
close(out_ubs);
close(g);
{********************Получим наименование организации*******************}
pr:='Введите наименование предприятия';
writeln(pr);
Read(pr1);
{****************************Результируем***************************
****}
Assign(in_ubs, 'C:ubs_openspis_in.txt');
Reset(in_ubs);
assign(g,'C:ubs_openresult.txt');
Reset(g);
assign(rez,'C:ubs_openspis_out.txt');
ReWrite(rez);
j:=0;
WriteLn(rez,'BOF10009');
{***Получение текущей даты***}
GetDate(y,m,d1,dow);
if m<10 then
Writeln(rez,'BOF2',d1,'0',m,y,'spis_out',d1,'.txt')
else
Writeln(rez,'BOF2',d1,m,y,'spis_out',d1,'.txt');
{Вывод файла в формате UBS для зачисления}
while not eof(in_ubs) and
not eof(g) do
begin
j:=j+1;
ReadLn(g,s);
readln(in_ubs,num,fam,probel,nam,probel1,och,probel2,date_r,probel3,
s_pas,probel4,n_pas,probel5,kem_pas,probel6,date_pas,addres);
Writeln(rez,'"',j,'","","',fam,'","',nam,'","',och,'","',s_pas,'","',n_pas
,'","',kem_pas,'","',date_pas,'","',date_r,'","","","",',s,'",','"","","",',
'"","","","РОССИЯ","","',addres,'",','"","","","","","","","","","",'
,'"","","""',pr1,'""","","","","","","","","","","","","","*","","",');
end;
WriteLn(rez,'EOF1',j);
close(in_ubs);
close(g);
close(rez);
END.
Вопрос :
Как заставить программу считывать входящий файл таким образом, что бы при обнаружении пробела, можно даже 2-х пробелов (if aaa = ' '; then ) переменной присваивалось значение стоящее перед этим пробелом.?
структура входящего ф-ла примерно такова:
1111111111111 222222222 3333333333 333333333
1111111111111 222222222 3333333333 333333333
1111111111111 222222222 3333333333 333333333
1111111111111 222222222 3333333333 333333333
и тд..