Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 14:23   #1
Silly Student
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 32
По умолчанию Работа со строками

Цель - спарсить кусок из текстового файла.

Делаю так:

Код:
int index = temp.AnsiPos("sid=");
AnsiString result = temp.SubString(index,(index+32));
ShowMessage(result);
(где temp это AnsiString, а index получает значение ~2600).

Выдает ВСЁ содержимое строки temp. Почему ?

Причем, если написать более маленькое значение, например (30,70), то все нормально.
Silly Student вне форума Ответить с цитированием
Старый 04.05.2011, 20:51   #2
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

int index = temp.AnsiPos("sid=");
Ну ты получил позицию в строке temp
--------------------------------------------
AnsiString result = temp.SubString(index,(index+32));
ты возврашаеш строку с символа index и далее 32 + index символа.
===========================
Возможная ошибка в строке temp.
хотя метод AnsiPos должен работать с многобайтными символами. И возвращать 0 при отсутствии вхождения.
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 04.05.2011, 20:53   #3
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

А вот с этим
==
Причем, если написать более маленькое значение, например (30,70), то все нормально.
==
Я не как не понял. Напиши весь листинг с коментариями чтобы не парится..
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 05.05.2011, 23:29   #4
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Цитата:
...temp.SubString(index,(index+32)) ;
Ты с позиции index выделяешь (index+32) штук символов. Т.е. если строка всего в 70-т символов, и строчка temp.AnsiPos("sid=") вернёт, скажем, значение 35. То строчкой temp.SubString(index,(index+32)) ты выделяешь не 32 символа с позиции 35, а 67 символов с позиции 35. И там уже происходит Процессор его знает что, ибо строка у нас всего в 70-т символов.))

В общем, если тебе нужно(а скорее всего тебе нужно именно это... sid длинною в 2637 символов я пока не встречал)) взять 32 символа начиная с символа под номером index, пиши так:
Цитата:
...
AnsiString result = temp.SubString(index,32);
...
ps: ой, да, Assemblerru уже сказал об этом. Тока как то не уверенно.)

Последний раз редактировалось Ksardas13; 05.05.2011 в 23:45.
Ksardas13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками asyat Помощь студентам 4 10.03.2011 22:35
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками Darknes Общие вопросы C/C++ 3 05.07.2010 15:37
Работа со строками Nividimka Помощь студентам 11 03.03.2007 15:58