Помощь - Поиск - Пользователи - Календарь
Полная версия: обычные файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Anastacia Adesso
Опять я. wacko.gif

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

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

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

У меня вышло что-то такое
Но там явно ошибка на ошибке
Нажмите для просмотра прикрепленного файла
volvo
Я же вот тут давал ссылку, КАК читать из текстового файла данные: Файлы

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

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
Типа так?
Компиляция работает..файл не создаёт
Нажмите для просмотра прикрепленного файла
volvo
Хм... Очень интересно... 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.