Форум: "Начинающим";
Текущий архив: 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.063 c