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


Автор: SandyProgrammer 23.4.2008, 18:36
Здравствуйте, уважаемые Программисты!
Помогите, пожалуйста с реализацией следующего. В общем суть программы такая. Пользователь с помощью диалога выбирает нужный текстовый файл, далее нужно этот файл преобразовать следующим образом:
1) убрать все знаки перевода строки (Enter), то есть чтобы файл был в одну строку;
2) необходимо чтобы между словами был только 1 пробел, то есть если между словами более 1-го пробела, то лишние убрать и оставить один пробел.
После этих преобразований, уже преобразованный текст нужно сохранить в файл, который находится в том же каталоге, где экзешник.
А так же, если файл уже удовлетворяет всем требованиям, то ничего не делать, то есть ничего никуда не копировать.

Автор: lukas 23.4.2008, 19:29
Код

procedure TrimFile;
  Var
  OD: TOpenDialog;
  LS: TStrings;
  S: String;
begin
 OD := TOpenDialog.Create(nil);
 if OD.Execute then 
   begin
    LS := TStringList.Create;
     LS.LoadFromFile(OD.FileName); 
     S := LS.Text;
     S := StringReplace(S,#13#10,'',[rfReplaceAll]);
     S := StringReplace(S,'  ',' ',[rfReplaceAll]);
     if LS.Text <> S then
       begin
         LS.Text := S;
         LS.SaveToFile(ExtractFilePath(ParamStr(0))+ExtractFileName(OD.FileName));
       end;
    LS.Free;
   end;
OD.Free;
end;

Автор: SandyProgrammer 23.4.2008, 19:50
Ага! Вот значит оно как!
lukas, спасибо Вам большое! Вопросы есть, но задавать не буду, сам разберусь, полезней будет. smile

Автор: Poseidon 24.4.2008, 10:03
Цитата(lukas @  23.4.2008,  19:29 Найти цитируемый пост)
     S := StringReplace(S,'  ',' ',[rfReplaceAll]);
Эту строку нужно прогонять несколько раз. Проверять, есть ли еще двойные пробелы и прогонять еще раз. Потому как может быть тройной пробел, тогда он преобразуется в двойной. Т.е. нужно еще раз провести приобразование.

Автор: SlaUr 24.4.2008, 16:08
Цитата

Эту строку нужно прогонять несколько раз. Проверять, есть ли еще двойные пробелы и прогонять еще раз. Потому как может быть тройной пробел, тогда он преобразуется в двойной. Т.е. нужно еще раз провести приобразование.


т.е. весь код должен быть примерно такой:
Код

procedure TrimFile;
  Var
  OD: TOpenDialog;
  LS: TStrings;
  S: String;
begin
 OD := TOpenDialog.Create(nil);
 if OD.Execute then 
   begin
    LS := TStringList.Create;
     LS.LoadFromFile(OD.FileName); 
     S := LS.Text;
     S := StringReplace(S,#13#10,'',[rfReplaceAll]);
     while pos('  ',S)>0 do    S := StringReplace(S,'  ',' ',[rfReplaceAll]);
     if LS.Text <> S then
       begin
         LS.Text := S;
         LS.SaveToFile(ExtractFilePath(ParamStr(0))+ExtractFileName(OD.FileName));
       end;
    LS.Free;
   end;
OD.Free;
end;

Автор: SandyProgrammer 24.4.2008, 16:32
Спасибо, я это уже понял.  smile 

Автор: lukas 24.4.2008, 20:06
Ну во-первых параметр [rfReplaceAll] дает как раз таки всю заменю... не нужно использовать While .. do... 

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