Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2012, 10:51   #1
sokolik-117845
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 14
По умолчанию Delphi сортировка строк в txt файлах

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

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

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

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

Последний раз редактировалось sokolik-117845; 09.04.2012 в 10:56.
sokolik-117845 вне форума Ответить с цитированием
Старый 09.04.2012, 11:13   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Используй TStringList и цикл for downto do
FaTaL вне форума Ответить с цитированием
Старый 09.04.2012, 11:14   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
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;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.04.2012, 11:34   #4
sokolik-117845
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
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;
Спасибо!!!
sokolik-117845 вне форума Ответить с цитированием
Старый 09.04.2012, 11:53   #5
sokolik-117845
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 14
По умолчанию

Еще такой вопрос:
Как к этому прикрепить прогресс бар?
sokolik-117845 вне форума Ответить с цитированием
Старый 09.04.2012, 14:01   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как к этому прикрепить прогресс бар?
вообще-то, на форуме действует строгое правило Одна тема <-> один вопрос.

но, в связи, с простотой вопроса, можно так:
Код:
   //перед циклом зададим размер прогрессбара
   ProgressBar1.Max := ts.Count;

   // приращение обеспечим внутри цикла
   for i:=0 to ts.Count-1 do begin
       ...... 
       ProgressBar1.StepBy(1);
      Application.ProcessMessages;   
   end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование строк в *.dfm файлах. husker Помощь студентам 4 23.11.2011 08:21
Замена строк в файлах kniazkinP Общие вопросы Delphi 0 27.10.2010 09:27
сортировка строк в txt Шушелла Общие вопросы .NET 9 24.04.2010 18:23
Поиск одинаковых строк в файлах xls valeryana Microsoft Office Excel 10 22.09.2009 11:45
Сортировка в файлах и записях. Паскаль Elizabeth Black Помощь студентам 2 27.05.2008 21:51