Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.046 c
10-1137243244
Alex17
2006-01-14 15:54
2007.10.07
Как это выгледит в Дельфи


15-1189267018
УАув
2007-09-08 19:56
2007.10.07
Десятичный логарифм


2-1189513474
swapfilea
2007-09-11 16:24
2007.10.07
ListView +AddItem


15-1189038479
Turbouser
2007-09-06 04:27
2007.10.07
Мультфильмы возвращаются :)


15-1189090603
Нуждающийся в совете
2007-09-06 18:56
2007.10.07
Учебник по теории вероятности и математической статистике.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский