Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Как присвоить значения одной переменной другой (TStringList)   Найти похожие ветки 

 
kyn66 ©   (2005-10-20 11:04) [0]

Уважаемые мастера, САБЖ сопсна. Есть две переменных

Var
 St1, St2 : TStringList;
Begin
  St1 := St2; // ???
  St1.Assign(St2); // ???
end;


Как правильно? И там и там вылетает ошибка 8-(


 
Eraser ©   (2005-10-20 11:09) [1]


> kyn66 ©   (20.10.05 11:04)

St1.Clear;
St1.AddStrings(St2);


Или St1.Text := St2.Text;


 
TUser ©   (2005-10-20 11:12) [2]

В первом случае ошибки не будет.


 
jack128 ©   (2005-10-20 11:29) [3]

kyn66 ©   (20.10.05 11:04)
Var
St1, St2 : TStringList;
Begin
 St1 := St2; // ???
 St1.Assign(St2); // ???
end;

Как правильно? И там и там вылетает ошибка 8-(


вообще то не мешало бы сначала создать эти стринг листы ;)


 
kyn66 ©   (2005-10-20 11:36) [4]

Создание ессно пропущено для краткости вопроса.
А естьли какая разница, если первая переменная у меня будет полем записи и ей я присваиваю значения?

Type
 TBiletArray = packed record
    B_Nomer : packed array[0..255]of Char;
    B_St1   : TStringList;
    B_St2   : TStringList;
    B_St3   : TStringList;
    B_St4   : TStringList;
    B_St5   : TStringList;
    B_St6   : TStringList;
 end;
Var
 B_Ar : TBiletArray;

...
 B_Ar.St1 := St1;
...

Вот ведь не хочет и все тут 8-(


 
Baltika-7   (2005-10-20 11:50) [5]


> kyn66 ©   (20.10.05 11:36) [4]


Прочувствуй разницу?

В случае st2 := st1 ты присваиваешь указатель,
В случае st2.Assign(st1) ты копируешь данные из st1 в st2? полностью заменяя содержимое st2.
В случае st2.AddStrings(s1) ты добавляешь данные из st1 в st2.


 
Baltika-7   (2005-10-20 11:50) [6]


> kyn66 ©   (20.10.05 11:36) [4]


Прочувствуй разницу?

В случае st2 := st1 ты присваиваешь указатель,
В случае st2.Assign(st1) ты копируешь данные из st1 в st2? полностью заменяя содержимое st2.
В случае st2.AddStrings(s1) ты добавляешь данные из st1 в st2.


 
kyn66 ©   (2005-10-20 11:53) [7]

>> Baltika-7
Да, спасибо, понял(это была прелюдия). А как мне поступить с [4] ?


 
Zhekson   (2005-10-20 11:53) [8]

вот те раз... и то и то не работает, что лучше???

по моему в этом случае лучше то, что глубже...


 
Zhekson   (2005-10-20 11:58) [9]

kyn66 ©   (20.10.05 11:53) [7]
казырная у тебя прелюдия, а я так туплю... так мастерам до того иногда нефиг делать, что они с меня гадят, по этому поводу...


 
Baltika-7   (2005-10-20 12:00) [10]


> Да, спасибо, понял(это была прелюдия). А как мне поступить
> с [4] ?


А в чем проблема?

Type
TBiletArray = packed record
   B_Nomer : packed array[0..255]of Char;
   B_St1   : TStringList;
   B_St2   : TStringList;
   B_St3   : TStringList;
   B_St4   : TStringList;
   B_St5   : TStringList;
   B_St6   : TStringList;
end;
Var
B_Ar : TBiletArray;

...
B_Ar.B_St1 := St1;


 
Zhekson   (2005-10-20 12:12) [11]

вместо B_Ar.B_St1 := St1;
B_Ar.B_St1Assign(st1); если с заменой содержимого и st2.AddStrings(s1) если добавить


 
Baltika-7   (2005-10-20 12:16) [12]


> Zhekson   (20.10.05 12:12) [11]
>
> вместо B_Ar.B_St1 := St1;


Не вместо, а в дополнение.


 
Zhekson   (2005-10-20 12:26) [13]

Baltika-7   (20.10.05 12:16) [12]
если в дополнение, то только к вами сказанному...


 
kyn66 ©   (2005-10-20 12:31) [14]

Проблема в том, что работая с переменными, я их предварительно объявляю. А как быть с полями записей. Как и когда их объявлять, чтобы с ними работать. Ведь изначально они Nil


 
Zhekson   (2005-10-20 12:53) [15]

Ты знаешь, нормального ответа в этой ветке ты не получишь... не козырная она... а от себя такого же вечно-начинающего добавлю, что нужно:
var
List1: TStringList;              // - обьявляем

begin
try                                  //проверяем
...
List1 := TStringList.Create; //создаём
...
finally            
List1.  Free;                     //выгружаем

end;


 
Baltika-7   (2005-10-20 13:03) [16]


> Проблема в том, что работая с переменными, я их предварительно
> объявляю. А как быть с полями записей. Как и когда их объявлять,
>  чтобы с ними работать. Ведь изначально они Nil


Работать с ними точно так же, как и с обычными переменными.
Если тебе нужно, чтобы объект существовал, вызывай конструктор:

myRec.Field1 := TMyClass.Create;

Если ты создаешь объекты отдельно, например, так:

MyObj := TMyClass.Create; и хочешь присвойть полю в твоей записи, то просто выполняй присвоение после создания объекта:

myRec.Field1 := MyObj;

PS.

Вот только не забывай, что любые сохданные тобой объекты нужно уничтожать самому после того, как они станут не нужны, например:

myRec.Field1.Free;
myRec.Field1 := nil //это необязательно

или

FreeAndNil(myRec.Field1);


 
kyn66 ©   (2005-10-20 13:04) [17]

[15] - это и есть работа с обычными переменными. А записи? Ведь у меня запись смешанного типа. После начинки, я храню ее в некотором файле типа Ini-файла. После эти данные мне считать. Во как.


 
Baltika-7   (2005-10-20 13:07) [18]


> kyn66 ©   (20.10.05 13:04) [17]
>
> [15] - это и есть работа с обычными переменными. А записи?
>  Ведь у меня запись смешанного типа. После начинки, я храню
> ее в некотором файле типа Ini-файла. После эти данные мне
> считать. Во как.


Вот с этого и надо было начинать.
Динамически созданные объекты не стоит хранить в ini-файле, либо писать полную выгрузку/загрузку всех полей вручную.


 
kyn66 ©   (2005-10-20 13:12) [19]

>> Baltika-7
Есть такая штука DataFile, позволяет хранить данные любого типа. От строк до фонтов, TStrings тоже, записи. Я уже написал запрос автору, ждемс. Он всегда помогал с ответом.


 
Плохиш ©   (2005-10-20 13:55) [20]


> kyn66 ©   (20.10.05 13:04) [17]
> [15] - это и есть работа с обычными переменными. А записи?
>  Ведь у меня запись смешанного типа.

А запись - это необычная переменная?
Может книжку-какую прикупить?


 
kyn66 ©   (2005-10-20 16:47) [21]

>> Плохиш
А поле в записи читал какого типа?


 
Leonid Troyanovsky ©   (2005-10-20 16:58) [22]


> kyn66 ©   (20.10.05 16:47) [21]

> А поле в записи читал какого типа?


- А кто ее брил?  Кто брил твою противную тетку?

--
Regards, LVT

ЗЫ Зачем смешивать коней и людей.
Если поля - объекты,то сделай их объемлющее объектом.
Тогда будет у него и конструктор и деструктор и т.д.


 
Digitman ©   (2005-10-20 17:01) [23]


> kyn66 ©   (20.10.05 16:47) [21]


> А поле в записи читал какого типа?


а какая разница, поле это или не поле ?

поле типа TStringList сохраняется точно так же как отдельная переменная TStringList... т.е. сначала сохраняется значение Length(StringList.Text) и следом - собственно StringList.Text ... просто в случае с записью все это нужно последовательно проделать с каждым полем такого типа


 
Digitman ©   (2005-10-20 17:09) [24]


> После начинки, я храню ее в некотором файле типа Ini-файла


зачем именно в Ini-файле ?

чтобы "ручками" можно было править его в текст.редакторе ?

или тебе просто нужно сохранить где-то настройки чего-то, чтобы при новом сеансе работы приложения восстановить их ?


 
kyn66 ©   (2005-10-21 12:15) [25]

Просто таким образом сохраняю некоторые наборы данных


 
Digitman ©   (2005-10-21 12:23) [26]


> Просто таким образом сохраняю некоторые наборы данных


т.е. первое что пришло в голову ...



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

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.038 c
8-1118673537
nWind
2005-06-13 18:38
2005.11.13
Сравнение gif ов


4-1126772390
SergeyGood
2005-09-15 12:19
2005.11.13
Функция CreateProcessWithLogonW


2-1129575723
ctokas
2005-10-17 23:02
2005.11.13
90 DEC в 90HEX


2-1130313822
alless
2005-10-26 12:03
2005.11.13
Как передать ф-ию в качестве параметра дин. массив?


14-1129897610
X9
2005-10-21 16:26
2005.11.13
Глючит комп