C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с TStringList  (Прочитано 4442 раз)
2rik
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 24


Работа с TStringList
« : 26 Октябрь 2009, 12:28:26 »

Ребята, подскажите плз.
Пишу программку, которой на вход подается файлик с записями данных для каждого элемента массива через пробел, например:
"123456789012 1 2
 123456789013 2 3"
Мне необходимо введенный пользователем текст в эдит бокс сравнить найти в TStringList, и, если найден, проверить стоящие за этим текстом данные.
Например пользователь ввел "123456789012", найти данные в файле и узнать, что после этого стоит 1 и 2.
Но тут проблема. Как лучше поступить - копировать каждую строку из TStringList в текстовую переменную и там посивольно сравнивать , или же есть какие нибудь методы для этого ?

TStrings *ArrayWrongSerial = new TStringList;
int count_wrong;
String serial;


ArrayWrongSerial->LoadFromFile(OpenUserFile->FileName);
count_wrong=ArrayWrongSerial->Count;

for (i=0;i                                                      
}


Заранее спасибо!
Записан
Lexa F.
Участник


Сказали спасибо: +23/-3
Offline

Сообщений: 455


Re: Работа с TStringList
« Ответ #1 : 26 Октябрь 2009, 13:42:12 »

как вариант:
Код
AnsiString = stroka;   // то что вводит пользователь
int ch1;                   // первое число
int ch1;                   // второе число
 
   TStringList *ls = new TStringList();
   ls->LoadFromFile("file.txt");
 
   for (int i=0; i ls->Count; i++){
       if(ls->Strings[i].Pos(stroka)){
          ch1 = StrToInt(ls->Strings[i].SubString(ls->Strings[i].Length()-2,1));  //получаем числа
          ch2 = StrToInt(ls->Strings[i].SubString(ls->Strings[i].Length(),1));     //
       }
   }
 
   delete ls;
 
только с типами не ошибиться ну и с SubString'ом, если числа будут не однозначные
хотя лучше найденную строку разбить с помощью Delimited или ExtractStrings и получить оба числа
Записан
2rik
Участник


Сказали спасибо: +0/-0
Offline

Сообщений: 24


« Ответ #2 : 26 Октябрь 2009, 14:20:11 »

Lexa F, Спасибо, помог .. )
Сначала пытался сам замутить так :
 AnsiString strTMP = ArrayWrongSerial->Strings;
 serial=strTMP.SubString(1,strTMP.Pos(";") - 1); // значение 3го столбца
             if (vvod==serial){

             }
Не переводил в инт, т.к. серийный номер 12-ти значный и билдер ругается, что мол это не инт, что вполне ес-но.
При запуске постоянно выбивало
Еstringlisterror list index out of bounds 3
Но сейчас сделал так, как ты посоветовал, и все пашет.
сенкс !
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.321 секунд. Запросов: 19.