Page 1 of 1

Инициализация записи

Posted: 08.04.2012 9:18
by Tomers
Доброго времени суток, товарищи форумчане.

Подскажите, как решить вот такую вот задачку:
Есть масив, состоящий из записей

Code: Select all

a_rec = record   
    name:string;   //строковый элемент (длина рандомная)
    tip:word;        
    name1:string;   //строковый элемент (длина рандомная)  
    name2:string;   //строковый элемент (длина рандомная)             
end;

var
А:array of a_rec;
возможно ли загнать исходные данные для масива А в основной программе. Типа так:

Code: Select all

А:=['Lower',$1BF2,'15','20',    //типа
'100',$1EB8,'5','8',                         //новая строка - новый элемент масива                        
'of the ',$27AC,'mage','12'];            //состоящий из записи


как это делалось, например, для обычного масива:

Code: Select all

bag_ar:=[$400E98C0,$400E98BE,$400E98BF,$400E98BD,$400E98B9];
По форуму искал, нашел только одну загрузку из файла строковых значений, которые затем резались. В данном случае это очень хлопотно по причине рандомной длины строк, да и не желательно создавать дополнительные файлы.

Re: Инициализация записи

Posted: 08.04.2012 9:21
by Vizit0r
так делать нельзя. ни в ПС, ни в Delphi.
в дельфах записи можно забивать целиком через Move, но там исходный объект должен быть несколько специфическим.
а в ПС нельзя вообще никак.

Re: Инициализация записи

Posted: 08.04.2012 9:55
by Tomers
как тогда решить это можна? Можна может грузить из ТИПИЗИРОВАНОГО файла, потому как со строковыми файлами все очень печально.

Re: Инициализация записи

Posted: 08.04.2012 10:09
by yuras
Tomers wrote:как тогда решить это можна? Можна может грузить из ТИПИЗИРОВАНОГО файла, потому как со строковыми файлами все очень печально.
неа, файлы работают только со строками. так а что мешает преобразовать строку в структуру. 1-й элемент ид, второй имя и т.д., следующая строка - следующая структура.

кусок кода для примера

Code: Select all

   List := TStringList.Create; 
   List.LoadFromFile(FileNam); 
   for i := 0 to List.Count-1 do 
   begin
      s := List.strings[i];
      Dim[i].tt := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
      Delete(s,1,Pos(' ',s)); 
      Dim[i].x := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
      Delete(s,1,Pos(' ',s)); 
      Dim[i].y := StrToInt(Copy(s,1,Pos(' ',s)-1));
   end'

Re: Инициализация записи

Posted: 08.04.2012 10:15
by Vizit0r
типизированный файл возможен, но
1) только для записей фиксированного размера, никаких строк неизвестной длины
2) нормально в ПС не вычитать его сразу и целиком.

так что только заполнять каждый элемент записей по порядку.

Re: Инициализация записи

Posted: 08.04.2012 10:20
by CFA
Tomers wrote: возможно ли загнать исходные данные для масива А в основной программе. Типа так:

Code: Select all

А:=['Lower',$1BF2,'15','20',    //типа
'100',$1EB8,'5','8',                         //новая строка - новый элемент масива                        
'of the ',$27AC,'mage','12'];            //состоящий из записи
http://stealth.od.ua/forum/viewtopic.php?p=2847#p2847

Re: Инициализация записи

Posted: 08.04.2012 10:30
by Vizit0r
это слегка другое.

Re: Инициализация записи

Posted: 13.04.2012 9:29
by Tomers
yuras wrote:неа, файлы работают только со строками. так а что мешает преобразовать строку в структуру. 1-й элемент ид, второй имя и т.д., следующая строка - следующая структура.

кусок кода для примера

Code: Select all

   List := TStringList.Create; 
   List.LoadFromFile(FileNam); 
   for i := 0 to List.Count-1 do 
   begin
      s := List.strings[i];
      Dim[i].tt := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
      Delete(s,1,Pos(' ',s)); 
      Dim[i].x := StrToInt(Copy(s,1,Pos(' ',s)-1)); 
      Delete(s,1,Pos(' ',s)); 
      Dim[i].y := StrToInt(Copy(s,1,Pos(' ',s)-1));
   end'
Благодарствую. Все не так и сложно оказалось. Работает нормально