Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
1

Считывания информации из файла для массива от записи

07.12.2014, 10:16. Показов 536. Ответов 1
Метки нет (Все метки)

В общем ситуация такая: Есть массив от записи, в полях которой есть еще массивы. Хочу из файла считать данные для этого массива и вывести их на экран в виде таблицы и на этом моменте вылетает ошибка 106.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
begin
                                reset(tic_all);
                                Writeln('-------------------------------------------');
                                Writeln('|', 'тут', '|', 'кароч', '|', 'названия столбцов', ' |');
                                Writeln('-------------------------------------------');
                                for i:=1 to r do begin
                                readln(tic_all, a[i].b);
                                read(tic_all, a[i].nr);
                                        for j:=1 to a[i].b do begin
                                        read(tic_all, a[i].nb[j], a[i].vb[j]);
                                        Writeln('|', a[i].nr, '|', a[i].nr:11, '|', a[i].nb[j]:14, '|', a[i].vb[j]:12:4, '|');
                                        Writeln('-------------------------------------------');
                                        end;
                                end;
                                close(tic_all);
                        end;
Пример файла выглядит так:


2

AA1111 111 32.000
AA1111 222 65.150
где первый столбец a[i].nr, второй a[i].nb[j], третий a[i].vb[j].

С файлами работаю впервые. Что я делаю не так?

Добавлено через 14 часов 3 минуты
переделал запись на такой вид:
2 hd8569 256 64.000
hd8569 512 32.768
Вот так произвожу запись:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
assign(tic_all, 'tic_all.txt');
        rewrite(tic_all);
        assign(tic_print, 'tic_print.txt');
        rewrite(tic_print);
 
        For i:=1 to r do begin
                write('‚ўҐ¤ЁвҐ *®¬Ґа ३б*: ');
                readln(a[i].nr);
                Writeln;
                Write('Љ®««ЁзҐбвў® ЎЁ«Ґв®ў ў н⮬ ३бҐ: ');
                readln(a[i].b);
                Writeln;
 
 
                clrscr;
 
                For j:=1 to a[i].b do begin
                  Write('ђҐ©б: ', a[i].nr);
                  writeln;
                  Writeln;
                  Write('‚ўҐ¤ЁвҐ *®¬Ґа ЎЁ«Ґв*: ');
                  Readln(a[i].nb[j]);
                  Writeln;
                  Write('‚ўҐ¤ЁвҐ ўҐб Ў*Ј*¦*: ');
                  Readln(a[i].vb[j]);
                  Writeln;
                  clrscr;
                end;
        end;
        Clrscr;
        For i:= 1 to r do begin
                Write(tic_all, a[i].b);
                 for j:= 1 to a[i].b do begin
 
                        Write(tic_all, a[i].nr, a[i].nb[j], a[i].vb[j]:10:3);
                        Writeln(tic_all);
                        if a[i].vb[j]>30 then
                                Writeln(tic_print, a[i].nr, ' ', a[i].nb[j], ' ', a[i].vb[j]:10:3);
 
                 end;
                 end;
        close(tic_all);
        close(tic_print);
так же ошибка с кодом 106. Я не понимаю почему он читает в не правильном порядке.

Добавлено через 23 часа 35 минут
Понял почему он считывает в неправильном порядке. Вероятно ему мешают пробелы, которые он воспринимает как строковые значения. Переделал запись в файл на каждое значение writeln, все заработало. Но ведь когда я создавал файл числового массива, я считывал именно строками, где между значениями стояли пробелы, и все работало хорошо. Может кто объяснить, почему считывание с файла, в данном случае, такое капризное?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2014, 10:16
Ответы с готовыми решениями:

Есть ли в С++ функция для считывания информации с файла с подробной настройкой?
Есть ли в С++ функция для считывания информации с файла с подробной настройкой?Мне нужно будет...

Команды считывания из файла и записи в файл
Здравствуйте, использую функцию freopen для чтения и записи информации в файл. Создаю файл...

Цикл построчного считывания файла и записи в textbox
Нужна помощь в создании цикла построчного считывания файла и записи в textbox, на форуме нашёл...

Демон для считывания информации с процессора
Здравствуйте, пишу демон считывания информации с процессора. По другому метаданные. Проблема...

1
Почетный модератор
64089 / 47498 / 32734
Регистрация: 18.05.2008
Сообщений: 115,182
07.12.2014, 10:35 2
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Но ведь когда я создавал файл числового массива, я считывал именно строками, где между значениями стояли пробелы, и все работало хорошо.
Если файл содержит только числа и пробелы, то его не читают строками, а просто считывают числа, пробелы при этом игнорируются. Например такой файл
1 2 3 5
читают так
Pascal
1
2
3
4
5
6
n:=0;
while not seekeof(f) do//seekeof(f) для того чтобы не читал пробелы после последнего числа
 begin
  n:=n+1;
  read(f,a[n]);
 end;
Добавлено через 1 минуту
А вот если в файле есть не числовые данные, то его нужно читать построчно и парсить каждую строку.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2014, 10:35

Использование CURL для считывания информации из дивов
Хочу попробовать написать самостоятельно скрипт, ибо очень нужен, который будет считывать...

Микроконтроллер для считывания информации из блока управления котла
Здравствуйте! Современные беспроводные термостаты стоят дорого (от 10 до 15 тыс. рублей), и поэтому...

Программа написанная на Qt для вывода информации считанной с датчиков подвисает во время считывания
Добрый день, Написал на Qt программу для вывода данных с датчика, считывание происходит при помощи...

Открыть существующий файл для записи и считывания
Написал код FILE * fo;//создаю указатель if( (fo=fopen("backup_date.txt","at")) == 0 )...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru