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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2007, 17:16   #1
Need_Help
 
Регистрация: 15.05.2007
Сообщений: 3
Вопрос Как прочесть два массива из файла

Хотелось бы понять, как можно прочесть два массива из файла.
С одним массивом всё понятно ., При помощи цикла считать поэлементно массив.


Но как быть с двумя. Непонятно как прочитать первый элемент второго массива
3 5 8 19
2 4 9 16 и чем отделять один массив от другого, т.е как обратиться к первому элементу второго массива


Программа для чтения из файла одного массива
program OpenFile;

const N = 3;
var
f: text;
s : array [1..N] of integer;
i : integer;
begin

assign( f,'h:\bp\bin\Moi pro\my.txt ');
reset(f);
for i :=1 to N do
begin read(f,s[i]);
writeln(s[i]);
end;
close(f);

end.
Need_Help вне форума Ответить с цитированием
Старый 19.05.2007, 16:11   #2
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
Подмигивание

надо поставить разграничение между 2-мя массивами.
Например: ########################
Потом стоит смотреть считывая всю строку из файла просто в строку не равен ли1-й элемент строки №
(For i:=1 to length(s) do
if s[1]<>'#') then a[k]:=strtoint(s[i]); else break или exit

Чуть подругому с со вторым:
q:=0;/// писать сразу по окончании полного считывания!
for i:=1 to length(s) do begin
if (s[1]<>'#') and(q<>1)then continue; else begin q:=1;break;end;
if q=1 then... теперь считываем в массив тот 2-й массив из текста.
bill вне форума Ответить с цитированием
Старый 19.05.2007, 16:48   #3
altar
Пользователь
 
Регистрация: 19.05.2007
Сообщений: 11
По умолчанию

Ужас, ну и способ, всё намного проще, объявить 2 переменных массива, а ещё проще создать запись специально и делать массив из этой записи, но для данного случая ето уж будет слишком. Т.к у тебя ето текстовый файл то програама ВАЩЕ правильно делать ни4е не будет.
-----------
Вот норм код
const n=4;
var
a,a1:array[1..n] of string;
i,j:integer;
s,s1:string;
f:text;
begin
assign(f,'НУ ТУТ НАПИШЕШЬ ПУТЬ');
reset(f);
readln(f,s);
s1:='';
j:=1;
for i:=0 to length(s) do
begin
if s[i]<>' ' then s1:=s1+s[i] else
begin
a[j]:=s1;
s1:='';
inc(j);
end;
end;
a1:=a;
s1:='';
j:=1;
for i:=0 to length(s) do
begin
if s[i]<>' ' then s1:=s1+s[i] else
begin
a[j]:=s1;
s1:='';
inc(j);
end;
end;
close(f);
end;
Только в етой программе 1 массив ето a1, кстати если 4ето будет ругаться(в чем я ОООО4ень не уверен), то надеюсь исправите.
Чем больше женщину мы меньше, тем меньше больше нас она.
altar вне форума Ответить с цитированием
Старый 19.05.2007, 20:45   #4
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

To altar:
Я написал способ с помощью которого действительно можно разграничить 2 массива. К тому же написал вариант кода как примерно должно все выглядеть.
Может есть способ лучше? не спорю.
bill вне форума Ответить с цитированием
Старый 20.05.2007, 10:42   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Хочется напомнить участникам клуба, что из текстовых файлов можно читать числа напрямую. Т.е. допустим при записи вы пишите write(f,x);
где х - число, то потом можете смело писать Read(f,x). единственное что должно быть обязательно, то что числа в файле должны разделяться пробелами, и всё. Такчто задача наипростейшая...

(eol(f) - возвращает true если достигнут конец строки в текстовом файле)

Код:
var f:text;
i:integer;
s:string;
a,b:array[...] of integer;
...

//забитие первого массива
i:=0; //счётчик массива, обнуляем его
while not(eol(f)) then //пока не дошли до конца строки...
begin
inc(i); //увеличиваем счёитчик
read(f,a[i]); //читаем число в массив
end;

Readln(f,s); //переход на следующую строку

//забитие второго массива
i:=0;
while not(eol(f)) then
begin
inc(i);
read(f,b[i]);
end;
Метод Bill:
1) задача на паскале, strtoint там нет
2) как программа будет считывать число... например 23? Т.е. строку 2 23 она переделает в массив (2,2,3), если вообще переделает...

Метод altar: в исходный массив забиваются строки, а нужны числа, следовательно много лишних операций, да и сложно как-то...

P.S.: задачу не проверял, но должна работать.

Последний раз редактировалось zetrix; 20.05.2007 в 10:46.
zetrix вне форума Ответить с цитированием
Старый 20.05.2007, 16:40   #6
altar
Пользователь
 
Регистрация: 19.05.2007
Сообщений: 11
По умолчанию

Кстати, можно сделать ето и для большого количества массивов. Создать
запись
type sostarray= record
a:array[1..n] of string;
end;
...
var
b:array[1..{кольво массивов}] of sostarray;
...
//обращение к елементам опред массива
b[i].a[j]//i-номер массива,j-номер элемента данного массива
P. S: точно не помню, но скорее всего так можно.
Чем больше женщину мы меньше, тем меньше больше нас она.
altar вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение из файла в два массива Frog25 Общие вопросы C/C++ 2 26.06.2008 12:15
Как прочесть исходный текст? Ruber Общие вопросы по Java, Java SE, Kotlin 0 05.06.2008 21:45
Как прочесть текст в чужом окне? ffo Win Api 3 27.04.2007 13:50
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01