|
Вопрос # 5 169/ вопрос решён / |
|
Здравствуйте! У меня такая задача:
Вот представьте огромный каталог. Тысячи текстовых документов. И в 1 из них есть в конце файла строка 'kill me'(без кавычек). Программа должна найти этот ненужный документ и удалить СТРОКУ. Как это сделать, если я не буду использовать memo, то поставят 4 или 5, если буду, то 2 или 3(оценка). Прошу, помогите хотябы на 4.
 |
Вопрос задал: Кудя (статус: Посетитель)
Вопрос отправлен: 9 апреля 2011, 13:33
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 23; последнее сообщение — 9 апреля 2011, 21:55; участников в обсуждении: 3.
Страницы: [1] [2] [Следующая »]
|
Егор (статус: 10-ый класс), 9 апреля 2011, 13:38 [#1]:
а зачем мемо? есть же странглисты или как их там - как бы те же мемо, только невидимые.
ну, на худой конец, можно readln использовать
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Егор (статус: 10-ый класс), 9 апреля 2011, 13:39 [#2]:
Цитата (Кудя):
Прошу, помогите хотябы на 4.
в чём должна заключаться помощь?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 15:09 [#3]:
направите меня по правильному пути к решению задачи.
Егор, я сделал с помощью TStringList, но как закрыть потом этот файл?
Think Different. (c)
|
|
min@y™ (статус: Доктор наук), 9 апреля 2011, 16:28 [#4]:
Файл закрывать не надо, он автоматически закрывается после считывания в память методом TStrings.LoadFromFile().
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 18:20 [#5]:
var
sl:TStringList;
i:integer;
begin
sl:= TStringList.Create;
//-------------------------------------------------------------------------------------
sl.LoadFromFile('C:\bla\bla\not me.txt');
for I := sl.Count - 1 downto 0 do
begin
if Pos('kill me', sl.Strings[I]) > 0 then
sl.Delete(I);
sl.SaveToFile('C:\bla\bla\not me.txt');
sl.Free;
end;
end.
Think Different. (c)
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 18:21 [#6]:
почему программа не удаляет строку?
Пишет ошибку: project exercise6.exe raised exception class EStringListError with messages 'List index out of bounds(2)'
Think Different. (c)
|
|
min@y™ (статус: Доктор наук), 9 апреля 2011, 18:29 [#7]:
Кошмарное форматирование.
Цитата (Кудя):
почему программа не удаляет строку?
Потому что sl освобождается в первом проходе цикла.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 18:31 [#8]:
я немного не вникаю=)
Think Different. (c)
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 18:32 [#9]:
с цифрами чтото не так?=)
Think Different. (c)
|
|
Егор (статус: 10-ый класс), 9 апреля 2011, 19:38 [#10]:
знаешь такую вещь, как отладчик? вот его используй. у тебя цикл. в этом цикле в первом проходе идёт сравнение i-ой (последней) строки с "kill me", а потом файл закрывается. затем начинается второй проход - а файл-то уже закрыт!
кстати, вот правильное оформление кода:
var
sl:TStringList;
i:integer;
begin
sl:= TStringList.Create;
//-------------------------------------------------------------------------------------
sl.LoadFromFile('C:\bla\bla\not me.txt');
for I := sl.Count - 1 downto 0 do
begin
if Pos('kill me', sl.Strings[I]) > 0 then
sl.Delete(I);
sl.SaveToFile('C:\bla\bla\not me.txt');
sl.Free;
end;
end.
больше форматировать не буду, сам изначально делай корректное оформление.
я думаю, тебе понятно, как исправить ситуацию?
вообще, я так смотрю, мыслишь ты в правильном направлении.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 20:28 [#11]:
а чем эти 2кода отличаются??
Think Different. (c)
|
|
Егор (статус: 10-ый класс), 9 апреля 2011, 20:42 [#12]:
форматированием.
правильное форматирование - очень важно. при неправильном форматировании код плохо читается.
в принципе, можно же вообще всю программу в одну строку забить:
var sl:TStringList;i:integer;begin sl:=TStringList.Create;sl.LoadFromFile('C:\bla\bla\not me.txt');for
I:=sl.Count-1 downto 0 do begin if Pos('kill me', sl.Strings[I])>0 then sl.Delete(I);sl.SaveToFile(
'C:\bla\bla\not me.txt');sl.Free;end;end.
скомпилится.
но человек не поймёт. а тексты программ пишутся не для компьютеров, а для людей! из нескольких более-менее равнозначных вариантов выбирай тот, который понятнее.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Егор (статус: 10-ый класс), 9 апреля 2011, 20:44 [#13]:
в коде, кстати, ошибка-то пока ещё осталась - я не поправлял.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 20:45 [#14]:
так блин, я же читабельно написал, даже отделял чёрточками этапы по очереди. Меня сейчас интересует, почему программа не удаляет эту строку=(
Think Different. (c)
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 20:50 [#15]:
по идее всё казалось легко, а тут не удаляет=)
Think Different. (c)
|
|
Егор (статус: 10-ый класс), 9 апреля 2011, 21:00 [#16]:
и минай, и я расписали же, почему
и ты не ответил - что такое отладчик, знаешь?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 21:03 [#17]:
нет=(
Think Different. (c)
|
|
Егор (статус: 10-ый класс), 9 апреля 2011, 21:10 [#18]:
ладно. фиг с ним, с отладчиком. найди книжку какую-нибудь по дельфи (я рекомендую фаронова, но тут на твой вкус) и чтобы была глава, посвящённая отладке программ. прочитаешь - поймёшь. что это изумительный инструмент. позволяет выполнять программу по шагам, при этом можно просматривать значения переменных (и даже менять!) ну и т.д.
по ошибке - прочитал объяснения миная и моё? если прочитал, то что непонятно? я вроде расписал подробно причину ошибки.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 21:23 [#19]:
Вы думаете я такой умный, пойму вас. Вот Минау писал о цикле, это я понял, но ГДЕ этот цикл?
Think Different. (c)
|
|
Кудя (статус: Посетитель), 9 апреля 2011, 21:28 [#20]:
читаю про отладку=)
Think Different. (c)
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|