IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Кок оптимизаровать программу??
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16

Репутация: -  0  +


Привет всем!!
Написал я программу, для обработки текстового файла. Впринципе все работает, но я пошел длинным и туповатым путем..
Вот она:
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
и тд..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.05.2024 3:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name