Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пт Июл 05 2002 16:18 Заголовок сообщения: Помогите! .... С++В |
|
|
Нужно заменить все символы "перевода строки" на "двойной пробел" в поле "мемо".
Нашел пример в книге. Помещаю в событие(выполнить при двойном нажатии в мемо) компонента мемо. Думаю чтот не так указал с переменными. (тут хотел пока попробовать заменить "а" на "б".
AnsiString S1,S2,S3;
S1 = Mprim->Text; S2 = "а"; S3 = "б";
int i0 = 0, i = S1.Pos(S2); while(i) { S1 = S1.SubString(1,i + i0 - 1) + S3 + S1.SubString(i+ i0 +S2.Length(),255); i0 += i - 1 +S3.Length(); i = S1.SubString(i0 + 1, 255).Pos(S2); }
Ошибок компил. не выдает и видимых действий нет. Помогите исправить код. |
|
Вернуться к началу |
|
|
Shuran
Зарегистрирован: 02.07.2002 Сообщения: 49
|
Добавлено: Пт Июл 05 2002 16:31 Заголовок сообщения: Re: Помогите! .... С++В |
|
|
Конечно использование передовых технологий - дело хорошее, но почему не попробовать попроще?
char S2='a'; char S3='б'; char *szBuffer=Mprim->Text;
for(int i=0; iText=szBuffer;
должно работать... |
|
Вернуться к началу |
|
|
Shuran
Зарегистрирован: 02.07.2002 Сообщения: 49
|
Добавлено: Пт Июл 05 2002 16:34 Заголовок сообщения: Вот, зараза, обрубило |
|
|
там где цикл, следует читать
for(int i=0; iText=szBuffer; |
|
Вернуться к началу |
|
|
Shuran
Зарегистрирован: 02.07.2002 Сообщения: 49
|
Добавлено: Пт Июл 05 2002 16:37 Заголовок сообщения: Re: Вот, зараза, обрубило |
|
|
оно не понимет символ меньше?
for(int i=0; i меньше strlen(szBuffer); i++) if(szBuffer[i]==S2) szBuffer[i]=S3;
Mprim->Text=szBuffer; |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июл 08 2002 08:59 Заголовок сообщения: Попробовал чтот не работает |
|
|
char S2='a'; char S3='б'; char *szBuffer=Mprim->Text.c_str();
for(int i=0; iText=szBuffer; |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июл 08 2002 09:00 Заголовок сообщения: отсеченое |
|
|
for(int i=0; iText=szBuffer; |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июл 08 2002 09:01 Заголовок сообщения: Re: отсеченое |
|
|
for(int i=0; i меньше strlen(szBuffer); i++) if(szBuffer[i]==S2) szBuffer[i]=S3; Mprim->Text=szBuffer; |
|
Вернуться к началу |
|
|
Shuran
Зарегистрирован: 02.07.2002 Сообщения: 49
|
Добавлено: Пн Июл 08 2002 15:42 Заголовок сообщения: Re: отсеченое |
|
|
Я вот тут не понял, ты прикалывался, когда писал ответ 3 раза переписывая мои неудачи написания знака "меньше" или это ты ничего не понял. Если не понял, то я задам вопрос. Оно не пошло - это что значит: не откопмпилилось или не работает в нормально собранной проге? Если понял, то тогда я не врубился в твою шутку |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Пн Июл 08 2002 18:43 Заголовок сообщения: Анатолий |
|
|
Shuran, извини эт, я не понял какой символ отсекает. Я вроде раньше всегда помещал код и все было нормально, это значит я не использовал символы больше, меньше. Ивини, я не хотел тебя кривить, даже об этом и не думал. А с кодом, компилятор ошибок не дает, но символы не заменяются. |
|
Вернуться к началу |
|
|
Shuran
Зарегистрирован: 02.07.2002 Сообщения: 49
|
Добавлено: Вт Июл 09 2002 08:46 Заголовок сообщения: Александр |
|
|
Ладно, проехали. А вот по поводу не рабочего кода, могу сказать только одно: у меня оно заработало,.. только вот если ты брал копию кода отсюда, то я тута написал вместо русской буквы "а" латинскую, так что, если поменяешь, то работать должно.
зы: а объявлять буфер я бы посоветовал все таки так
char *szBuffer=Mprim->Text.c_str(); |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Вт Июл 09 2002 14:20 Заголовок сообщения: Shuran. Огромное спасибо. |
|
|
Действительно, я только скопировал как обычно для упрощения. А когда все перебрал, то все заработало. Еще раз спасибо за отзывчивость. reut@land.ru - придет время мож, и я помогу чем смогу. |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Вт Июл 09 2002 15:03 Заголовок сообщения: Re: Александр, вот пишет.... |
|
|
Работает код, но выдает предупреждение: [C++ Warning] FormReg.cpp(693): W8012 Comparing signed and unsigned values. Как избавиться, я ж в последней строке кода использую переменную?
Можно еще спросить. Как заменить все переводы строки на двоойной пробел. Пробовал ставить в S2='#10' и пробовал '\n'. убирает но не совсем(не все) оставляет одну.
Мне это надо чтоб в гриде не отображались всякие нехорошие символы. Я в форме формирую запись в компонентах TEdit?TMemo, и перед записью в табл. хочу удалить из компонента TMemo все переводы строк, но данным циклом удаляеться не все. Может неправильно указываю что удалить.? |
|
Вернуться к началу |
|
|
Shuran
Зарегистрирован: 02.07.2002 Сообщения: 49
|
Добавлено: Вт Июл 09 2002 16:59 Заголовок сообщения: Рассказываю |
|
|
1) Warning кидает из-за того, strlen возвращает тип "unsigned int", значит i надо объявлять в цикле не как "int", а как "unsigned int" 2) Когда ты нажимаешь Enter, в Memo вставляется не один символ '\n', а два: перед ним (по-моему, но может и за ним) идет ещё один - '\r', который тоже нужно заменить. Т.е. создаешь еще один точно такой же цикл, ничего в нем не меняя, а вот перед ним добавляешь S2='\r';
3) А вот по поводу грида, я не понял, что ты хочешь, но наверное ты знаешь, что делаешь |
|
Вернуться к началу |
|
|
Anatoliy
Зарегистрирован: 15.04.2002 Сообщения: 681 Откуда: Moscow
|
Добавлено: Чт Июл 11 2002 09:42 Заголовок сообщения: Re: Рассказываю |
|
|
Спасибо все получилось. |
|
Вернуться к началу |
|
|
|