Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убрать все знаки переноса в txt-файле, А также лишние пробелы 
V
    Опции темы
SandyProgrammer
  Дата 23.4.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Здравствуйте, уважаемые Программисты!
Помогите, пожалуйста с реализацией следующего. В общем суть программы такая. Пользователь с помощью диалога выбирает нужный текстовый файл, далее нужно этот файл преобразовать следующим образом:
1) убрать все знаки перевода строки (Enter), то есть чтобы файл был в одну строку;
2) необходимо чтобы между словами был только 1 пробел, то есть если между словами более 1-го пробела, то лишние убрать и оставить один пробел.
После этих преобразований, уже преобразованный текст нужно сохранить в файл, который находится в том же каталоге, где экзешник.
А так же, если файл уже удовлетворяет всем требованиям, то ничего не делать, то есть ничего никуда не копировать.
PM MAIL   Вверх
lukas
Дата 23.4.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Код

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;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
SandyProgrammer
Дата 23.4.2008, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Ага! Вот значит оно как!
lukas, спасибо Вам большое! Вопросы есть, но задавать не буду, сам разберусь, полезней будет. smile
PM MAIL   Вверх
Poseidon
Дата 24.4.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



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



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
SlaUr
Дата 24.4.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: 1
Всего: 5



Цитата

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


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

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;


Это сообщение отредактировал(а) SlaUr - 24.4.2008, 16:09
PM MAIL   Вверх
SandyProgrammer
Дата 24.4.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Спасибо, я это уже понял.  smile 
PM MAIL   Вверх
lukas
Дата 24.4.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



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


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.