| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |