Помощь - Поиск - Пользователи - Календарь
Полная версия: Кок оптимизаровать программу??
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
USA
Привет всем!!
Написал я программу, для обработки текстового файла. Впринципе все работает, но я пошел длинным и туповатым путем..
Вот она:
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
и тд..
trminator
А что эта программа должна делать? А то, может, проще другой алгоритм придумать...

Цитата
Вопрос :
- это к этой же программе? Может, я его не так понял, но Read(...) читает как раз до пробела
USA
Программа из одного формата файла делает другой формат..
С добавление в него новые поля, такие как фамилия имя клиента, название организации и др.
Можно было бы в эту программу вставить процедуру определения по фамилии и имени, пола (м или ж)..??? только я ума не приложу как можно такой алгоритм вырисовать.?
SKVOZNJAK
Составь базу данных мужских и женских имён, закатай её в файл и сверяйся с ней.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.