Нужно считать файл в динамический двумерный массив - Pascal
Формулировка задачи:
Нужно считать файл в двумерный динамический массив, вычислив количество строк в файле...
Решение задачи: «Нужно считать файл в динамический двумерный массив»
textual
Листинг программы
var f: Text; arr: Array Of Array Of Integer; i, j: Byte; begin Assign(f, 'f.txt'); Reset(f); SetLength(arr, 0, 0); while (Not EoF(f)) do begin SetLength(arr, Length(arr) + 1); while (Not EoLn(f)) do begin SetLength(arr[Length(arr) - 1], Length(arr[Length(arr) - 1]) + 1); Read(f, arr[Length(arr) - 1, Length(arr[Length(arr) - 1]) - 1]); Write(arr[Length(arr) - 1, Length(arr[Length(arr) - 1]) - 1], ' '); end; ReadLn(f); WriteLn; end; Close(f); WriteLn; WriteLn('Lines count: ', Length(arr)); for i := 0 to Length(arr) - 1 do begin for j := 0 to Length(arr[i]) - 1 do Write(arr[i, j], ' '); WriteLn; end; end.
Объяснение кода листинга программы
- Объявлены переменные:
- f: Text;
- arr: Array Of Array Of Integer;
- i, j: Byte;
- Задается имя файла 'f.txt' и он открывается с помощью функции Assign(f, 'f.txt') и Reset(f).
- Создается двумерный массив arr с помощью функции SetLength(arr, 0, 0).
- В цикле while (Not EoF(f)) происходит чтение данных из файла до конца файла.
- Внутри цикла while (Not EoLn(f)) создается новый массив arr[Length(arr) - 1] с помощью функции SetLength(arr[Length(arr) - 1], Length(arr[Length(arr) - 1]) + 1).
- В цикле while (Not EoLn(f)) происходит чтение данных из файла построчно.
- В каждой итерации внутреннего цикла считывается число и записывается в массив arr[Length(arr) - 1, Length(arr[Length(arr) - 1]) - 1] с помощью функции Read(f, arr[Length(arr) - 1, Length(arr[Length(arr) - 1]) - 1]).
- После каждой итерации внутреннего цикла добавляется пробел с помощью функции WriteLn.
- После каждой строки добавляется символ новой строки с помощью функции ReadLn.
- После чтения всех данных добавляется символ новой строки с помощью функции WriteLn.
- Выводится количество строк в файле с помощью функции Length(arr).
- В цикле for i := 0 to Length(arr) - 1 происходит обход массива по строкам.
- Внутри цикла for j := 0 до Length(arr[i]) - 1 происходит обход массива по столбцам.
- В каждой итерации внутреннего цикла выводится значение элемента массива с помощью функции Write(arr[i, j], ' ').
- После каждой итерации внутреннего цикла добавляется пробел с помощью функции WriteLn.
- После каждой строки добавляется символ новой строки с помощью функции ReadLn.
- Закрывается файл с помощью функции Close(f).
- Выводится количество строк в файле с помощью функции Length(arr).
- Добавляется символ новой строки с помощью функции WriteLn.