_NIK_ |
Отправлено: 10.03.2006, 19:49 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
В чем проблема или это глюк?Такой код
CODE |
TStringList *myList = new TStringList
myList->LoadFromFile("test.txt");
myList->BeginUpdate();
for (int i = 0; i < myList->count(); i++)
{
myList->operator [] (i).insert("testString",1);
}
myList->EndUpdate();
myList->SaveToFile("test.txt");
|
Почему файл остается темже???
|
|
Gal |
Отправлено: 10.03.2006, 20:16 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 124
|
Надеюсь файл "test.txt" в текущей директории?
и почему
CODE |
myList->operator [] (i).insert("testString",1);
|
Я бы сделал так
CODE |
myList->Insert(i, "testString");
| |
|
_NIK_ |
Отправлено: 12.03.2006, 00:47 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
QUOTE (Gal @ 10/03/2006, 20:16) | Надеюсь файл "test.txt" в текущей директории?
и почему
CODE |
myList->operator [] (i).insert("testString",1);
|
Я бы сделал так
CODE |
myList->Insert(i, "testString");
|
|
1. Файлу приписывается точный путь начиная с диска C:
2. Именно начиная с позиции 1, а не i вставляется строка "testString".Может быть наоборот — в топике писал по памяти(в смысле поменять параметры местами).
Все равно он НЕ МЕНЯЕТСЯ!!!
Отредактировано _NIK_ — 12/03/2006, 00:51
|
|
xTrim |
Отправлено: 12.03.2006, 20:13 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
вот примерно так, не зная цели операций точнее не сделаешь.
CODE |
TStringList *myList = new TStringList();
myList->LoadFromFile("test.txt");
int t = myList->Count; // иначе в цикле Count будет меняться и зациклит программу
for (int i = 0; i < t; i++)
{
myList->Insert(1,"testString"+IntToStr(i)); // вставка элемента в 1 позицию списка, НЕ в нулевую
}
myList->SaveToFile("test.txt");
delete myList; // не забывай удалять то что создал!
|
теперь посмотрим почему не изменялось ничего:
myList->operator [] (i) — то-же что и myList[i] — возвращает значение i-того элемента списка.
т.е. то что ты написал равносильно этому:
CODE |
AnsiString temp_ = myList[i];
temp_.Insert("testString",1);
|
вставили в 1 позицию "testString" и благополучно забыли эту переменную.
так что, учиться, учиться и учиться!
|
|
_NIK_ |
Отправлено: 12.03.2006, 22:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
QUOTE (xTrim @ 12/03/2006, 20:13) | вот примерно так, не зная цели операций точнее не сделаешь.
CODE |
TStringList *myList = new TStringList();
myList->LoadFromFile("test.txt");
int t = myList->Count; // иначе в цикле Count будет меняться и зациклит программу
for (int i = 0; i < t; i++)
{
myList->Insert(1,"testString"+IntToStr(i)); // вставка элемента в 1 позицию списка, НЕ в нулевую
}
myList->SaveToFile("test.txt");
delete myList; // не забывай удалять то что создал!
|
теперь посмотрим почему не изменялось ничего:
myList->operator [] (i) — то-же что и myList[i] — возвращает значение i-того элемента списка.
т.е. то что ты написал равносильно этому:
CODE |
AnsiString temp_ = myList[i];
temp_.Insert("testString",1);
|
вставили в 1 позицию "testString" и благополучно забыли эту переменную.
так что, учиться, учиться и учиться! |
1. Дык между myList->operator [] (i) и myList[i] нет никакой разницы.
2. А почему это myList->Count меняется, ведь при myList->Insert(1,"testString") увеличивается размер только той строки кот. меняешь общее кол-во строк ведь не меняется. Почему надо так for (int i = 0; i < t; i++), а не так myList->Count, странно ты знаешь?
3. И через temp_.Insert("testString",1) тож пробовал — к ней добавляет, но после myList->operator [] (i) = temp_, все равно myList->operator [] (i) не меняется!
|
|
Grigoriy |
Отправлено: 12.03.2006, 23:28 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (_NIK_ @ 12/03/2006, 22:54) |
2. А почему это myList->Count меняется, ведь при myList->Insert(1,"testString") увеличивается размер только той строки кот. меняешь общее кол-во строк ведь не меняется.
|
А какой тогда функцией можно было бы вставить строку в список строк ?
QUOTE |
Почему надо так for (int i = 0; i < t; i++), а не так myList->Count, странно ты знаешь?
|
Потому что нужно ещё раз внимательно почитать сообщение от xTrim.
QUOTE |
3. И через temp_.Insert("testString",1) тож пробовал — к ней добавляет, но после myList->operator [] (i) = temp_, все равно myList->operator [] (i) не меняется!
|
Попробуй так
myList->Strings[i]=temp_.
|
|
_NIK_ |
Отправлено: 16.03.2006, 23:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
QUOTE (Grigoriy @ 12/03/2006, 23:28) | QUOTE (_NIK_ @ 12/03/2006, 22:54) |
2. А почему это myList->Count меняется, ведь при myList->Insert(1,"testString") увеличивается размер только той строки кот. меняешь общее кол-во строк ведь не меняется.
|
А какой тогда функцией можно было бы вставить строку в список строк ?
QUOTE |
Почему надо так for (int i = 0; i < t; i++), а не так myList->Count, странно ты знаешь?
|
Потому что нужно ещё раз внимательно почитать сообщение от xTrim.
QUOTE |
3. И через temp_.Insert("testString",1) тож пробовал — к ней добавляет, но после myList->operator [] (i) = temp_, все равно myList->operator [] (i) не меняется!
|
Попробуй так
myList->Strings[i]=temp_. |
1. Строка вставляется так — myList->Add(%AnsiString%) — добавляет новую строку в существующий список, myList->Insert(pos,"testString") — вставляет строку "testString" в позицию pos, при этом он вставляет в эту позицию, а не заменяет.
2. Еще раз прочитал...не пойму. Ты наваерно думаешь, я не учел перед этим int t = myList->Count, дык я это упустил — и так понятно.
3. Попробую...
|
|
_NIK_ |
Отправлено: 16.03.2006, 23:53 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
2 Grigoriy: myList->Strings[i]=temp_ — РАБОТАЕТ!!!
И SaveToFile тож заработал!
Только вот не понятно почему же не работало myList->operator [] (i)???
Отредактировано _NIK_ — 16/03/2006, 23:55
|
|