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

Вниз

Как присвоить значения одной переменной другой (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.037 c
1-1129806966
kivadim
2005-10-20 15:16
2005.11.13
как получить доступ из одного объекта к элементам др. объекта


14-1130002151
БарЛог
2005-10-22 21:29
2005.11.13
Хорошее выражение, но...


14-1129813492
keal
2005-10-20 17:04
2005.11.13
Увелечение рисунка


14-1129701653
Иксик
2005-10-19 10:00
2005.11.13
Есть ли у нас на форуме кто-нибудь из Симферополя?


14-1129885338
User133
2005-10-21 13:02
2005.11.13
Windows2000 и права пользователя





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский