link7952 link7953 link7954 link7955 link7956 link7957 link7958 link7959 link7960 link7961 link7962 link7963 link7964 link7965 link7966 link7967 link7968 link7969 link7970 link7971 link7972 link7973 link7974 link7975 link7976 link7977 link7978 link7979 link7980 link7981 link7982 link7983 link7984 link7985 link7986 link7987 link7988 link7989 link7990 link7991 link7992 link7993 link7994 link7995 link7996 link7997 link7998 link7999 link8000 link8001 link8002 link8003 link8004 link8005 link8006 link8007 link8008 link8009 link8010 link8011 link8012 link8013 link8014 link8015 link8016 link8017 link8018 link8019 link8020 link8021 link8022 link8023 link8024 link8025 link8026 link8027 link8028 link8029 link8030 link8031 link8032 link8033 link8034 link8035 link8036 link8037 link8038 link8039 link8040 link8041 link8042 link8043 link8044 link8045 link8046 link8047 link8048 link8049 link8050 link8051 link8052 link8053 link8054 link8055 link8056 link8057 link8058 link8059 link8060 link8061 link8062 link8063 link8064 link8065 link8066 link8067 link8068 link8069 link8070 link8071 link8072 link8073 link8074 link8075 link8076 link8077 link8078 link8079 link8080 link8081 link8082 link8083 link8084 link8085 link8086 link8087 link8088 link8089 link8090 link8091 link8092 link8093
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TStringList, Еба..ый TStringList
_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");

Почему файл остается темже??? ohmy.gif ohmy.gif ohmy.gif
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".Может быть наоборот — в топике писал по памяти(в смысле поменять параметры местами).
Все равно он НЕ МЕНЯЕТСЯ!!! ohmy.gif sad.gif

Отредактировано _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" и благополучно забыли эту переменную.
cool.gif так что, учиться, учиться и учиться!
_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" и благополучно забыли эту переменную.
cool.gif так что, учиться, учиться и учиться!

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)???
wink.gif wink.gif wink.gif

Отредактировано _NIK_ — 16/03/2006, 23:55

Вернуться в Вопросы программирования в C++Builder