Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 068

/ вопрос открыт /

Здравствуйте, эксперты!
Мне надо вывести именно 14-тую строку из текстового файла,
весь файл не проблема, а одну строку неполучается, целый день туплю. приложенный код вроде должен работать, а выдаёт ошибку invalid numeric input
Заранее спасибо.

Приложение:
  1. dirs: string;
  2. num_lines,x: integer;
  3. line1,line2: string;
  4. f: TextFile;
  5.  
  6. begin
  7. if FileExists(Forms_dir + KursNBR_mask) then
  8. begin
  9. dirs:=(Forms_dir + KursNBR_mask);
  10. assignfile(f, dirs);
  11.  
  12. if IOResult <> 0 then
  13. begin
  14.  
  15. exit;
  16. end;
  17. readln(f, num_lines);
  18. for x:= 1 to num_lines do
  19. begin
  20. if x=14 then
  21. begin
  22. readln(f, line2);
  23. showmessage(line2);
  24. end;
  25. end;
  26. closefile(f);
  27. end;


slava863 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: slava863 (статус: Посетитель)
Вопрос отправлен: 5 августа 2009, 17:13
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Мережников Андрей

Здравствуйте, slava863!
строку readln(f,num_lines); уберите совсем. И цикл for тоже. в данном случае он не нужен.
Сделайте так как написано в приложении:

Приложение:
  1.  
  2. x:=0;
  3. while not(eof(f))and(x<14)
  4. do begin
  5. readln(f,line2);
  6. inc(x);
  7. end;
  8. closefile(f);
  9. if x=14
  10. then showmessage(line2)
  11.  


Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 5 августа 2009, 17:24

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, slava863!
Странный код, перегруженный лишним. я бы решил просто.

var
sl:TStringList;
begin
sl:=TStringList.create;
try
  sl.LoadFromFile('имяфайла');
  if (sl.count < 14) then begin
    ShowMessage('Мало строк в файле');
    exit;
  end;
  ShowMessage(sl[14-1]);
finally
  sl.free;
end;
end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 августа 2009, 17:27


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 6 августа 2009, 09:19; участников в обсуждении: 3.
slava863

slava863 (статус: Посетитель), 5 августа 2009, 17:30 [#1]:

а если две строки 13(line1) и 14 (line2)
Вадим К

Вадим К (статус: Академик), 5 августа 2009, 17:34 [#2]:

Если по одиночке, то
ShowMessage(sl[12]);
ShowMessage(sl[14-1]);
если вместе
ShowMessage(sl[14-1] + ' ' + sl[14-1]);
Галочка "подтверждения прочтения" - вселенское зло.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 5 августа 2009, 18:19 [#3]:

to Вадим К - красиво!
Вадим К

Вадим К (статус: Академик), 5 августа 2009, 18:34 [#4]:

правда в моем решении есть одна загвоздка. Надо решить, как строки нумеровать. То есть, что считать 14 строкой. я просто их считал от 1 и вперёд. Но так как в первой строке записан номер, то наверно её надо исключить из счета... Но это уже проблемы вопрошающего - всё равно плюс-минус единица...
Галочка "подтверждения прочтения" - вселенское зло.
slava863

slava863 (статус: Посетитель), 6 августа 2009, 09:19 [#5]:

Спасибо Вадим К код супер.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.03 сек.