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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2012, 21:34   #1
Sfaiter
Новичок
Джуниор
 
Регистрация: 06.08.2012
Сообщений: 1
По умолчанию редактирование .txt

Доброго времени суток!

Подскажите пожалуйста код программы в Delphi, для удаления строк в текстовом файле, начинающиеся со слова 'j', при этом после удаления чтобы не оставались пустые строки и массив текста был сплошным, и каждое предложение начиналось c новой строки.

Пример:
а(i),b(j) - предложения, где i,j - слова с которого начинается предложение.

вид текста:
а(i).
а(i).
b(j).
а(i).
b(j).
b(j).
а(i).
после выполнения получаем:
а(i).
а(i).
а(i).
а(i).
не должно получится:
а(i).
а(i).

а(i).


а(i).


За ранее очень благодарен.
Sfaiter вне форума Ответить с цитированием
Старый 06.08.2012, 22:44   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

поключаете модуль Classes и используя TStringList получите то что нужно:

Код:
procedure ClearFile(AFileName:string);
var f:TStringList; i:integer; s:string;
begin
 f:=TStringList.Create;
 f.LoadFromFile(AFileName);
 i:=0;
 while i<f.Count do begin
 s:=f[i];
 if lowercase(s[1])='j' then 
  f.Delete(i)
 else
  inc(i);
 end;
 f.SaveToFile(AFileName);
 f.Free;
end;
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 07.08.2012, 01:16   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Лучше цикл for использовать вместо while:
Код:
for i := f.count - 1 downto 0 do
  if lowercase(f[i][1])='j' then f.Delete(i)
Arigato вне форума Ответить с цитированием
Старый 07.08.2012, 10:15   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Arigato, не соглашусь, т.к. в снижающемся цикле при удалении программа дважды будет проверять одну и ту же строчку (а то и больше)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 07.08.2012, 10:29   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

С чего это вдруг дважды?
Arigato вне форума Ответить с цитированием
Старый 07.08.2012, 10:29   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Zer0, а вы попробуйте один и второй вариант и будете очень удивлены, сравнив временные характеристики FOR и WHILE, естественно на достаточно больших объёмах данных. И двойная проверка не при делах - после удаления i уменшается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.08.2012, 13:38   #7
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Действительно, виноват, видимо не выспался сегодня
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скопировать текст с файла 1.txt и записать в 2.txt Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 14.12.2010 05:56
импорт из txt, работа с массивом данных, экспорт в txt Danara Microsoft Office Excel 4 31.03.2010 00:26
txt в listbox и редактирование Giza Помощь студентам 0 25.01.2010 02:44
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01