Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2022, 11:41   #1
Кверт
Пользователь
 
Регистрация: 09.08.2021
Сообщений: 15
По умолчанию PascalABC.NET 3.8.1. Прочитать файл и весь поместить в матрицу

Файл Table2.txt содержит таблицу чисел размером, например, 10х2:
Код:
1 1
2 4
3 9
…
10 100
Требуется прочитать файл и поместить его весь в матрицу такого же размера.

В PascalABC.NET нет функции типа ReadAllMatr.
Но есть ReadAllLines, ReadAllText и ReadLines.

Требуется, используя только эти новшества PascalABC.NET, получить матрицу.

Вариант 1.
Код:
##
// считать файл в строку:
var a := ReadAllText('Table2.txt'); // a:  string

// строку превратить в массив чисел 
// и на его основе сгенерировать матрицу 10x2:
var m := Matr(10, 2, a.ToIntegers);
Недостаток: надо заранее знать размер матрицы.

Вариант 2. С программным определением размера матрицы:
Код:
##
// определить колич. строк и колич. столбцов таблицы:
var b := ReadAllLines('Table2.txt');// b: array of string
var КоличСтрок := b.Length;
var КоличСтолбцов := b[0].ToIntegers.Length;
b := nil;

// считать файл в строку:
var a := ReadAllText('Table2.txt'); // a:  string

// строку превратить в массив чисел 
// и на его основе сгенерировать матрицу:
var m := Matr(КоличСтрок, КоличСтолбцов, a.ToIntegers);

m.Println;
Вариант не самый красивый: файл читается два раза.

А как, чтобы красиво?

(Традиционный способ: читать файл в цикле построчно, строку превращать в массив и добавлять его в матрицу, – мне известен.)

Спасибо!
Кверт вне форума Ответить с цитированием
Старый 01.02.2022, 15:51   #2
Кверт
Пользователь
 
Регистрация: 09.08.2021
Сообщений: 15
По умолчанию

Вспомнил, что есть генератор Matr, не требующий указания размера матрицы, матрицу можно построить на основе одномерного массива чисел. Так что задача сводится к преобразованию массива строк, прочитанных из файла, в массив чисел.
Код:
##
var a := ReadAllLines('Table2.txt');         // a: array of string
var m := Matr(a.Select(x -> x.ToIntegers).ToArray); // m: array[,] of integer

Последний раз редактировалось Кверт; 01.02.2022 в 16:00.
Кверт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование кода из C в PascalABC.NET (символы и строки) - PascalABC.NET ParkerVans Помощь студентам 5 05.12.2017 10:09
Написать код на языке C: Из файла F1 прочитать матрицу A (10,20). Вычислить сумму элементов каждой строки, отсортировать, записать в файл F2 marysluva Помощь студентам 6 31.12.2016 14:03
[PascalABC.NET]Как записать данные с рекорда в файл? destra1j Помощь студентам 0 17.05.2016 19:03
Прошу помощи. Тема: Типизированный файл. PascalABC.NET Roman_BaTbKo Помощь студентам 0 20.12.2015 23:02
Типизированный файл в задаче (Часть 1) PascalABC.net? serge-first Помощь студентам 8 26.03.2014 14:46