Вниз
Скачать: CL | DM;

Записи в массиве   Найти похожие ветки 

← →
NikolayGavrilovM   (2007-09-08 11:30) [0]

У меня есть запись

TExmpl = record
 Id1, Id2: LongWord;
 Name1, Name2: string;
 Types: Word;
 TI: Real;
end;


и их массив

recarray: array of TExmpl;

И есть текстовый файл/Stream/StringStream/StringList, такого формата:

1 //id1
2 //id2
test1  //name1
test2 //name2
5 //Types
777 //TI
2 //id1 -- начало второй записи
5
test3
test4
90
8373


В формате выше для примера представлено две таких записи. В качестве разделителя используется перенос на новую строку.
И вопрос такой: Как наиболее быстро и корректно заполнить мой массив, прочитав из текстового файла/strStream/StrList данные?


← →
NikolayGavrilovM   (2007-09-08 11:37) [1]

Забыл добавить, вот попытался написать чтение из текстового файла построчно, но мне кажется, это плохой код.

r: Integer
text: string;

 AssignFile(myFile, "datas.txt");
 Reset(myFile);
 while not Eof(myFile) do
 begin
   SetLength(recarray, Length(recarray) + 1);
   with recarray[r] do
   begin
     ReadLn(myFile, text);
     Id1 := StrToInt(text);
     ReadLn(myFile, text);
     Id2 := StrToInt(text);
     ReadLn(myFile, text);
     name1 := text;
...... и т.д.
   end;
   Inc(r);
 end;

 CloseFile(myFile);


← →
Palladin ©   (2007-09-08 11:47) [2]

Это нормальный код. Только можно сократить.

r: Integer

AssignFile(myFile, "datas.txt"); Reset(myFile);
while not Eof(myFile) do
begin
  SetLength(recarray, Length(recarray) + 1);
  with recarray[r] do
  begin
    ReadLn(myFile, Id1);
    ReadLn(myFile, Id2);
    ReadLn(myFile, Name1);
...... и т.д.
  end;
  Inc(r);
end;

CloseFile(myFile);


ps: не рекомендую давать имя text идентификатору


← →
Anatoly Podgoretsky ©   (2007-09-08 13:12) [3]

Какой же нормальный?

function StrToInt(const S: string): Integer;

Не знаю как вообще можно строку преобразовать в LongWord, вроде нет стандартных функций, самому разве рисовать.
Это же будет относиться и к Readln


← →
Anatoly Podgoretsky ©   (2007-09-08 13:16) [4]

Кроме LongWord наблюдается еще и generic тип Real
Тут надо с нуля переписывать программу, начиная со структуры
TExmpl = record
  Id1, Id2: LongInt;
  Name1, Name2: string;
  Types: Word;
  TI: Double;
end;

Ну а после этого ReadLn или другое будет работать бело и пушисто и переносимо от версии к версии. От Д1 ( и даже TP) до 2007 и далее.


← →
Palladin ©   (2007-09-08 13:22) [5]


> Не знаю как вообще можно строку преобразовать в LongWord

очень просто, с помощью val


← →
Palladin ©   (2007-09-08 13:26) [6]


> Anatoly Podgoretsky ©   (08.09.07 13:16) [4]

интересно зачем человеку знаковое целое если нужно беззнаковое? они (LongWord и LongInt) оба заявлены как фундаментальные


← →
Palladin ©   (2007-09-08 13:28) [7]

да и readln прекрасно справляется с LongWord


← →
Anatoly Podgoretsky ©   (2007-09-08 13:36) [8]

> Palladin  (08.09.2007 13:22:05)  [5]

с val не пробовал, а справка не дает ответа на этот вопрос.
Надо написать тестовую программу, где на вход подать значение выше Int64
Мне лень, пусть автор проверит.
С Cardinal типа у Борланда всегда заморочка, из версии в версию.


← →
Anatoly Podgoretsky ©   (2007-09-08 13:42) [9]

> Palladin  (08.09.2007 13:26:06)  [6]

Только у cardinal у Борланда вечные недоработки, как это было ранее, так и осталось.
Тогда задам вопрос по другому, а зачем автору нужно такое гигантское беззнаковое, думаю, что он просто не подумал, а не от нужды, может ему и половины диапазона хватит, с гарантией работы в любой версии.

Извиняюсь и в предыдущем ответе немного не подумал, спутал с 64 битами.
Но с LongWord все равно проблемы имеют место, зависят от версии.

Задача как всегда осталась за кадром, вместо объяснения задачи видим типовой вопрос, как решить те или иные кривые или нет представления.


← →
Anatoly Podgoretsky ©   (2007-09-08 13:42) [10]

> Palladin  (08.09.2007 13:28:07)  [7]

Я уже извинился, перепутал с 64 битами.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: -0.983 c
15-1189450087
Andy BitOff
2007-09-10 22:48
2007.10.07
Не стирает привод, HL-DT-ST DVDRAM GSA-H42L (LG)


2-1189505304
нико-лай
2007-09-11 14:08
2007.10.07
ReadLn +Double


1-1183471965
Kolan
2007-07-03 18:12
2007.10.07
Придумал архетиктуру с пакетами и медиатором, помогите реализоват


3-1180274821
Nic
2007-05-27 18:07
2007.10.07
Импортировать базу даненых в SQL Server 2000


15-1187942734
Vitaliy_____
2007-08-24 12:05
2007.10.07
Принадлежность точки контуру




   Наверх