Лена |
Отправлено: 18.09.2006, 16:00 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
После программного формирования строки, она может иметь одну, две, три и т.д. или не одной запятой. Как найти именно последнюю запятую и удалить ее?
|
|
Doga |
Отправлено: 18.09.2006, 16:50 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Привет!
Может, вот это подойдёт:
QUOTE |
Returns the byte index in S of the last character that matches any character in the Delimiters AnsiString.
Unit
SysUtils
Category
string handling routines
extern PACKAGE int __fastcall LastDelimiter(const AnsiString Delimiters, const AnsiString S);
Description
Call LastDelimiter to locate the last delimiter in S. For example, the line
MyIndex = LastDelimiter("\.:","c:\filename.ext");
sets MyIndex to 12.
When working with multi-byte character sets (MBCS), S may contain double byte characters, but the delimiters listed in the Delimiters parameter must all be single byte non-null characters. |
И для удаления можно вот это:
QUOTE |
Removes a specified number of characters from the string.
AnsiString& __fastcall Delete(int index, int count);
Description
Delete modifies the AnsiString to remove count characters from the string beginning with the character at index, where 1 is the index of the first character. It returns the resulting modified string (*this).
If index is larger than the length of the AnsiString or less than 1, no characters are deleted.
If count specifies more characters than remain starting at the index, Delete removes the rest of the string. If count is less than 0, no characters are deleted.
|
Отредактировано Doga — 18.09.2006, 16:56
|
|
Лена |
Отправлено: 18.09.2006, 17:11 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Правильно ли я поняла:
Допустим, строка с запятыми имеет имя AnsiString AllParam.
После ee формирования пишем:
int pos = AllParam.LastDelimiter(“,” );
AllParam.Delete(pos,1);
|
|
Doga |
Отправлено: 18.09.2006, 17:18 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Не, немного не так:
CODE |
int pos = LastDelimiter(“,”, AllParam);
AllParam.Delete(pos, 1);
|
Отредактировано Doga — 18.09.2006, 17:19
|
|
Лена |
Отправлено: 18.09.2006, 17:42 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Спасибо!
P.S.
Странно, но мой код:
int pos = AllParam.LastDelimiter(“,” );
AllParam.Delete(pos,1);
тоже работает. |
|
Doga |
Отправлено: 18.09.2006, 17:53 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Всё правильно, LastDelimiter существует и как самостоятельный метод, и как метод класса AnsiString.
Это я лохтер
|
|
Лена |
Отправлено: 18.09.2006, 18:03 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Спасибо за помощь и разъяснения! |
|
Valdemar |
Отправлено: 19.09.2006, 07:23 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
А еще есть функция StrRScan, которая возвращает последнее вхождение символа в строку. |
|
Doga |
Отправлено: 19.09.2006, 18:22 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
То же вариант, если строка типа char*
|
|