![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
USA |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Репутация: ![]() ![]() ![]() |
Привет всем!!
Написал я программу, для обработки текстового файла. Впринципе все работает, но я пошел длинным и туповатым путем.. Вот она: 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 и тд.. |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 15:56 |