Помощь - Поиск - Пользователи - Календарь
Полная версия: обычные файлы
Форум «Всё о Паскале» > 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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.