Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ обычные файлы

Автор: Anastacia Adesso 11.01.2007 18:13

Опять я. wacko.gif

Моё самое последнее задание из Паскаля..
Дан файл в котором записаны элементы матрицы по строкам. Элементы разделены запятыми.

1,31,6,12
43,7,21,2

типа вот этого
надо записать в другой файл сумму элементов каждой строки

У меня вышло что-то такое
Но там явно ошибка на ошибке
Прикрепленный файл  UZD8.PAS ( 721 байт ) Кол-во скачиваний: 539

Автор: volvo 11.01.2007 18:44

Я же вот тут давал ссылку, КАК читать из текстового файла данные: http://forum.pascal.net.ru/index.php?s=&showtopic=14134&view=findpost&p=82083

При использовании этой функции программа становится тривиальной:

var X: integer;
...
reset(f1); rewrite(f2);
while not eof(f1) do begin
s:=0; X := 0;
while (not eoln(f1)) and (X <> -1) do begin
X := get_num(f1);
if X <> -1 then s := s + X;
end;
readln(f1);
writeln(f2,s);
end;
close(f1); close(f2);
...

Автор: Anastacia Adesso 11.01.2007 19:16

Типа так?
Компиляция работает..файл не создаёт
Прикрепленный файл  UZD8.PAS ( 975 байт ) Кол-во скачиваний: 533

Автор: volvo 11.01.2007 20:37

Хм... Очень интересно... FPC создает, а TP действительно не хочет... Какая-то проблема с EOLn, получается... blink.gif

Вот это отработало для TP (костыль, конечно, я попробую еще пошаманить):

uses crt;
var f1,f2: text;
s1,s2: string;
i,s,x: integer;

function get_num(var f: text; var eoline: boolean): integer;
var x :integer; ch: char;
begin
get_num:=-1;
if not seekeof(f) then begin
ch:=#0; x:=0;
while not (ch in ['0'..'9']) do begin
read(f,ch);
end;
while (ch in ['0'..'9']) do begin
x:=x*10+(Ord(ch)-Ord('0'));
read(f, ch);

if ch = #13 then eoline := true;

end;
get_num:=x
end;
end;

var
line: boolean;

begin
clrscr;
writeln('Imya pervogo fajla'); readln(s1);
writeln('Imya novogo fajla'); readln(s2);
assign(f1,s1); assign(f2,s2);
reset(f1); rewrite(f2);
while not eof(f1) do begin
s:=0; x:=0;
line := false;
while (not line) and (not seekeof(f1)) do begin
x:=get_num(f1, line);
if x<>-1 then s:=s+x;
end;
writeln(f2,s);
end;

close(f1); close(f2);
readkey
end.