Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Delphi работа с txt файлами!


Автор: sokolik117845 9.4.2012, 10:20
Приветствую форумчан! 
Есть .txt файл в котором содержаться строки вида: 

111xxxx 
222xxxx 
222xxxx 
333xxxx 
111xxxx 
555xxxx 
666xxxx 
777xxxx 
888xxxx 

Выше приведенные строки необходимо раскинуть по трем .txt файлам следующим образом: 
строки, которые содержат в начале символы 111, 222 вырезать из исходного файла и записать в 1.txt 
строки, которые содержат в начале символы 333, 555 вырезать из исходного файла и записать в 2.txt 
строки, которые содержат в начале символы 666, 777, 888 вырезать из исходного файла и записать в 3.txt

буду признателен, если кто поможет кодом! С текстовыми файлами раньше не работал, а тут срочно понадобилось! 

Автор: Данкинг 9.4.2012, 10:29
Грузи всё в TStringlist и работай как обычно со строками. Всякие AssignFile тебе и не потребуются.

Автор: sokolik117845 9.4.2012, 12:52
Может пригодится кому!
Код

var ts, ts1,ts2, ts3 :TStringList;
   i : integer;
   s : string;
begin
  ts := TStringList.Create;
  ts1 := TStringList.Create;
  ts2 := TStringList.Create;
  ts3 := TStringList.Create;

  try
    ts.LoadFromFile('Исходный.txt');
    for i:=0 to ts.Count-1 do begin
      s := ts.Strings[i];
      if  (Pos('111',s)=1) or (Pos('222',s)=1) then ts1.Append(s)
      else
        if  (Pos('333',s)=1) or (Pos('555',s)=1) then ts2.Append(s)
        else
          if  (Pos('666',s)=1) or (Pos('777',s)=1)
                                      or (Pos('888',s)=1) then ts3.Append(s)
     end;
     
     {сохранение результатов}
     ts1.SaveToFile('1.txt');
     ts2.SaveToFile('2.txt');
     ts3.SaveToFile('3.txt');

    end;

  finally
     ts.Free;
     ts1.Free;
     ts2.Free;
     ts3.Free;
  end;
  

end;

Автор: RelictOs 9.4.2012, 13:16
Код

var
 i : integer;
 Fname : string;
begin

with TStringList.Create do
begin
 LoadFromFile('Test.txt');
 for i := 0 To Count -1 do
  begin
   if (pos('111',Strings[i]) > 0) or (pos('222',Strings[i]) > 0) then
    Fname := 'File1.txt'
   else
    if (pos('333',Strings[i]) > 0) or (pos('555',Strings[i]) > 0) then
     Fname := 'File2.txt'
    else
     if (pos('666',Strings[i]) > 0) or (pos('777',Strings[i]) > 0) or (pos('888',Strings[i]) > 0) then
      Fname := 'File3.txt'
     else next;

   with TFileStream.Create(Fname,fmCreate or fmOpenWrite or fmShareDenyWrite) do
     begin
      Seek(Size,soBeginning);
      Write(PChar(Strings[i])[0],Length(Strings[i]));
      Free;
     end;
   Strings[i] := '';
  end;
  SaveToFile('Test.txt');
  Free;
end;
end;


Знаю, есть масса более простых методов, но мне было интересно разобраться именно с TStream, что я и попытался сделать на вашем примере.

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