Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Чтение строки файла до определенного символа


Автор: Romany4 27.9.2009, 09:37
Имеется файл с таким содержимым:

Цитата

85.115.192.0 mask 255.255.224.0
212.112.96.0 mask 255.255.224.0
195.38.160.0 mask 255.255.224.0
91.207.96.0 mask 255.255.254.0
...


Использую код:
Код

cmd := 'open';
fil := 'route.exe';
dir:= 'C:';
assign (listfile, 'myfilter.lst');
reset (listfile);
while not eof (listfile) do
  begin
    readln (listfile, strl);
    str:= 'add'+' '+strl+' '+ ip;
    par:= pansichar (str);
    ShellExecute(0, cmd, fil, par, nil, SW_HIDE);
  end;
end;

В общем до конца файла идет цикл, в котором каждая строка присваивается переменной strl
для получения вида:

route add 85.115.192.0 mask 255.255.224.0 ip
route add 212.112.96.0 mask 255.255.224.0 ip
...

Хочу изменить содержимое файла так:
Цитата

85.115.192.0 mask 255.255.224.0; #comment1
212.112.96.0 mask 255.255.224.0; #comment2
195.38.160.0 mask 255.255.224.0; #comment3
91.207.96.0 mask 255.255.254.0; #comment4
...


Как теперь сделать, чтобы функция readln в цикле читала строку только до знака ";", а затем переходла к следующей, т.е. не читала "комментарии"?


Автор: Данкинг 27.9.2009, 09:56
Считывать строку целиком, а затем из неё вырезать "левую" часть, т.е. до нужного символа.

Автор: Romany4 27.9.2009, 10:49
Данкинг, с алгоритмом поможете?

Автор: Данкинг 27.9.2009, 10:58
Алгоритм: заводишь переменную. Перебираешь строку посимвольно. Если символ - не ";", то добавляем его к значению переменной, а если ";", то выходим из цикла.

Автор: ~FoX~ 27.9.2009, 20:30
вместо ReadLn  использовать Read

Автор: Romany4 3.10.2009, 00:38
Спасибо, справился:

Код
var listfile:textfile;
g, strl:string; // строка файла и переменная для извлечения
begin
  assign (listfile, 'myfilter.lst');
  reset (listfile);
  while not eof (listfile) do
    begin
      readln (listfile, g);
      strl:=copy(g,1,pos(' #',g)-1); // извлекаю текст до символов " #"
      str:= 'add'+' '+strl+' '+ ip;  // присваиваю значение глобальной переменной
      par:= pansichar (str);  // меняю тип
      ShellExecute(0, cmd, fil, par, nil, SW_HIDE); // запускаю
    end;
  closefile (listfile);
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)