конец файла

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

конец файла

Сообщение an-na2002 » 13.02.2007 18:42:51

При записи в файл данных в конце создается пустая строка. eof её читает и программа вылетает как этого избежать
an-na2002
новенький
 
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение Romtek » 13.02.2007 19:29:43

Предусмотреть в коде наличие пустой строки в конце файла. :)
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение an-na2002 » 13.02.2007 21:53:54

Можно подробнее
an-na2002
новенький
 
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение Attid » 13.02.2007 22:00:19

ну ты написал бы что ты делаешь (код) для этого даже модные теги есть [ code ][ /code ] а там уже будет видно что ты там не так делаешь.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение an-na2002 » 13.02.2007 23:00:42

Ни чего сверхестественного я не делаю
AssignFile(Vf,Form2.Edit4.Text); -- файл созданный ранее с пустой строкой
reset(Vf);
h:=Form2.Edit4.Text;
s:=ExtractFilePath(h);
na:=ExtractFileName(h);
gn:=s+copy(na,1,Length(na)-4)+'dif'+'.txt';
AssignFile(Vv,gn);
Rewrite(Vv);
while not eof(Vf) do
begin
read(Vf,w,g);
e:=(g-b)/(w-a);
q:=(w+a)/2;
writeln(Vv,q,e);
a:=c;
b:=d;
c:=w;
d:=g;
end;
an-na2002
новенький
 
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение Alexander » 14.02.2007 01:07:18

Можно действовать в разных направлениях.
Мне кажется что может помочь try except
причём в секцию except вставить continue,
а после - break. Но здесь я мог соврать.

Или разбирать строку вручную.

Другой путь (более аккуратный) -
не писать эту строку во входной файл.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение an-na2002 » 14.02.2007 01:23:51

Она пишится автоматически
an-na2002
новенький
 
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение Alexander » 14.02.2007 01:42:59

Тьфу, насоветовал. Пардон. В except можно ничего не вставлять. Или
на своё усмотрение.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Alexander » 14.02.2007 01:45:09

И continue тоже.

Главное чтобы:

Код: Выделить всё
try
...
read(Vf,w,g);
...
except
end;
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение shade » 14.02.2007 10:41:21

Мне кажеться, что где-то нужен readln. Представте описание формата входного файла.
Или, если весь читаемый текст находиться только в одной первой строке, то заменить eof на Eoln
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение an-na2002 » 15.02.2007 07:24:20

Примерный формат файла:
5.200000000000000E-001 2.494278998076028E-002
5.400000000000000E-001 3.023569763882614E-002
5.600000000000001E-001 3.632108342033522E-002
.........
9.800000000000004E-001 2.517207163083517E-001
1.000000000000000E+000 2.561248431383064E-001
an-na2002
новенький
 
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение shade » 15.02.2007 10:23:07

Попробуй вместо read readln, но это спасет только от одного лишнего перевода строки. Вообще если используется свой формат, то лучше было бы, если это возможно, в первой строке прописать число строк и не мучается.
try except тоже должен работать
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Romtek » 15.02.2007 13:39:57

А что если читать с помощью
Код: Выделить всё
read (F, N1); // N1 - первое число
readln (F, N2); // -второе

?

Код: Выделить всё
var
  n1, n2: real;
  f: text;
begin
     Assign (F, '1.txt');
     Reset (F);

     while NOT EOLn (F) do
     begin
          read (F, N1);
          readln (F, N2);
          writeln (N1:8:5, N2:8:5)
     end;

     Close (F);
end.
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение Romtek » 15.02.2007 13:42:26

an-na2002
Простите за нескромный вопрос: а каким боком это относится к Lazarus? Это ведь чистый Паскаль... Я проверял код в TP7 + FPC 2.0.2.
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение ev » 15.02.2007 15:30:14

уже перенесено ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru