конец файла

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

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

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

конец файла

Сообщение an-na2002 »

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

Сообщение Romtek »

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

Сообщение an-na2002 »

Можно подробнее
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

ну ты написал бы что ты делаешь (код) для этого даже модные теги есть [ code ][ /code ] а там уже будет видно что ты там не так делаешь.
an-na2002
новенький
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение an-na2002 »

Ни чего сверхестественного я не делаю
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;
Аватара пользователя
Alexander
энтузиаст
Сообщения: 866
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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

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

Другой путь (более аккуратный) -
не писать эту строку во входной файл.
an-na2002
новенький
Сообщения: 10
Зарегистрирован: 01.08.2006 11:16:22

Сообщение an-na2002 »

Она пишится автоматически
Аватара пользователя
Alexander
энтузиаст
Сообщения: 866
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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

Сообщение Alexander »

И continue тоже.

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

Код: Выделить всё

try
...
read(Vf,w,g);
...
except
end;
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

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

Сообщение an-na2002 »

Примерный формат файла:
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
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

Попробуй вместо read readln, но это спасет только от одного лишнего перевода строки. Вообще если используется свой формат, то лучше было бы, если это возможно, в первой строке прописать число строк и не мучается.
try except тоже должен работать
Аватара пользователя
Romtek
постоялец
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган
Контактная информация:

Сообщение Romtek »

А что если читать с помощью

Код: Выделить всё

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 »

an-na2002
Простите за нескромный вопрос: а каким боком это относится к Lazarus? Это ведь чистый Паскаль... Я проверял код в TP7 + FPC 2.0.2.
ev
долгожитель
Сообщения: 1793
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение ev »

уже перенесено ;)
Ответить