Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вообще ничего не понимаю что происходит со значением переменной. [D7, WinXP]


Hereticsoul ©   (2004-10-06 13:37:00) 

Уважаемые мастера вот кусок кода:

//..................
type
 Titems = record
   ID: integer;
   Name: string;
   Access_Level: integer;
   Parent_Number: integer;
   Level: integer;
   Number_In_Category: integer;
   Comment: string;
   Count: integer;
   typ: integer;
   replace: string;
 end;

type
 tnodes = record
   count: integer;
   item: ttreenode;
 end;
//.............

var
 aclevel, i: integer;
 items: array[0..50] of titems;
 nodes: array[0..500] of tnodes;
 nodes1: array[0..500] of tnodes;

//...............

procedure TForm5.sButton1Click(Sender: TObject);
var
 data: TIdMultiPartFormDataStream;
 item, tmp,temps: string;
 flg, x, flg1, i10: integer;
 z, z1: ttreenode;
 zzz:tstringlist;
begin
//...........здесь я получаю верную(!) строку item с разделителями

while pos('|', item) > 0 do
 begin
   items[flg].ID := strtoint(copy(item, 0, pos('|', item) - 1));
   //showmessage(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].Name := copy(item, 0, pos('|', item) - 1);
   //showmessage(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].Access_Level := strtoint(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].Parent_Number := strtoint(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].Level := strtoint(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].Number_In_Category := strtoint(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].Comment := copy(item, 0, pos('|', item) - 1);
   delete(item, 1, pos('|', item));
   items[flg].typ := strtoint(copy(item, 0, pos('|', item) - 1));
   delete(item, 1, pos('|', item));
   items[flg].replace := copy(item, 0, pos('|', item) - 1);
   delete(item, 1, pos('|', item));

   flg := flg + 1;
   items[0].Count := items[0].Count + 1;
 end;

x := 0;
 nodes[0].count := 0;
 nodes[1].count := 0;

 for i := 0 to items[0].Count-1 do
 begin
   if items[i].Level = 0 then
   begin
     temps:=items[i].Name;
     nodes[nodes[0].count].item := tree.Items.AddChild(z1, temps);
//!!!! и вот здесь значение переменной
items[items[0].count-1].Name принимает вид что-то вроде " ¬­C XIІ \x18xµ     8\xB\x19         яяяяяяяя \x1  &   \x1C{ " - набор непонятных символов.
     nodes1[nodes[0].count].item := nodes[nodes[0].count].item;
     nodes[0].count := nodes[0].count + 1;
     nodes1[0].count := nodes1[0].count + 1;
     nodes1[nodes[0].count].item := tree.Items.AddChild(nodes[nodes[0].count - 1].item, '1');
     nodes1[0].count := nodes1[0].count + 1;
     nodes1[nodes[0].count].item := tree.Items.AddChild(nodes[nodes[0].count - 1].item, '2');
     nodes1[0].count := nodes1[0].count + 1;

   end;
 end;

ПОЧЕМУ????


Hereticsoul   (2004-10-07 13:55:00) [1]

Удалено модератором


ЮЮ   (2004-10-07 03:47:00) [2]

>И когда ставлю 1 то первый знак строки куда-то подозрительно проподает

begin
//...........здесь я получаю верную(!) строку item с
разделителями

значит получаешь неверную(!) строку


Amoeba   (2004-10-06 15:30:00) [3]


> Hereticsoul ©   (06.10.04 15:26) [7]
> И вообще 0 это не индех а позиция каретки и она может быть
> нулевой

Чушь городишь. В орешник захотелось? Позиция каретки здесь ни при чем. Этот параметр - индекс превого символа в строке, с которого начинается копируемый фрагмент. И он не может быть меньше единицы.
Читай справку по Copy до полного прояснения.


Семен Сорокин   (2004-10-06 15:28:00) [4]


> Hereticsoul ©   (06.10.04 15:26) [7]
> И вообще 0 это не индех а позиция каретки и она может быть
> нулевой

не спорьте, а лучше почитайте справку по copy


Hereticsoul   (2004-10-06 15:26:00) [5]

И вообще 0 это не индех а позиция каретки и она может быть нулевой


Hereticsoul   (2004-10-06 15:25:00) [6]

I>
> У строки нет символа с индексом 0. Счет начинается с 1.
> RTFM!!!


А почему ошибку не выдает??
И когда ставлю 1 то первый знак строки куда-то подозрительно проподает


Amoeba   (2004-10-06 15:21:00) [7]


> items[flg].ID := strtoint(copy(item, 0, pos('|', item) -
> 1));

У строки нет символа с индексом 0. Счет начинается с 1.
RTFM!!!


Семен Сорокин   (2004-10-06 15:20:00) [8]


> Hereticsoul ©   (06.10.04 15:15) [3]
> Вообщем выставил ее и теперь он мне ее выдает в начале заполнения
> на строке
>
> items[flg].ID := strtoint(copy(item, 0, pos('|', item) -
> 1));


flg вышел за границу массива items


Hereticsoul   (2004-10-06 15:15:00) [9]

Вообщем выставил ее и теперь он мне ее выдает в начале заполнения на строке

items[flg].ID := strtoint(copy(item, 0, pos('|', item) - 1));


Hereticsoul   (2004-10-06 15:10:00) [10]

Ой млин а это как?Простите за глупость.


Семен Сорокин   (2004-10-06 14:35:00) [11]

range check error выставь


Наверх

Титульная страница Поиск, карта сайта Написать письмо