Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Замена строки в Memo   Найти похожие ветки 

 
Костя   (2006-02-24 16:24) [0]

Доброго времени суток !

У меня вопрос возник, подскажите пожалуйста.

У меня есть файл txt, я его загружаю в Memo и делаю поиск и замену строки:

вот так выглядит файл
/////////////////////////////////
//         City                    //
//         Planet                 //
//         Money                 //
/////////////////////////////////

Например я ищу строку Money и хочу её заменить на строку введённую в Edit, вот такая процедурка эта делает у меня:


procedure TForm1.Button1Click(Sender: TObject);
var mm:string;
begin
mm:=StringReplace(Memo1.Text, "Money", Edit1.Text, [rfReplaceAll]);
Memo1.Text:=mm;
end;


но допустим ввели мы слово длинее чем слово Money например NoneMoney, соответственно оно заменяет его, но тогда съезжает форматирование файла (косые линии) взависимости от того если короче то съзжает влево, а если длинее то вправо.

Помогите пожалуйста, как реализовать нормальную замену без искажения форматирования документа.

Заранее всем благодарен.


 
Desdechado ©   (2006-02-24 18:29) [1]

1. меняем короткое на длинное: дополнить пробелами заменяемое короткое
2. меняем длинное на короткое: дополнить пробелами заменяющее короткое

а потом StringReplace

ps дополнять пробелами можно спереди, сзади, с обеих сторон


 
API   (2006-02-24 18:30) [2]

Помогите пожалуйста, как реализовать нормальную замену без искажения форматирования документа.

Первое, что напрашивается:
- использовать для TMemo непропорциональный шрифт, например, Courier, Courier New, И
- замену производить на строку той же длины (количество символов), добавляя, если нужно, пробелы.

Однако, если новая строка заведомо длиннее старой строки, то такой метод применить не удастся.
В такой ситуации надо писать уже довольно серьезный "текстовый процесор", который будет задокументированно использовать символы "/" в качестве "визуального оформления", и будет уметь находить визуальную границу (как в примере), и производить корректировку (а методы уже могут быть разные).


 
Belorus ©   (2006-02-24 18:43) [3]

s:="//     ABCDEFG   //";
nw:="slovco";
cs:=s;
For x:=4 to Length(s-2) do
For x2:=1 to Length(nw) do
cs[x]:=nw[x2];


 
API   (2006-02-24 18:50) [4]

Belorus ©   (24.02.06 18:43) [3]

А что Ваш код делает?


 
Костя   (2006-02-26 12:47) [5]

Извините пожалуйста, задание немного усложняется.

Есть такой файл, но немного переработаный:

/////////////////////////////////
//         City                     //
//                                   //
//         Planet                  //
//                                   //
//         Money                 //
//         Yes                     //
//                                   //  
/////////////////////////////////

Надо заменить Money Yes на например NoneMoney GameOver
и чтобы оно выглядело так:

/////////////////////////////////
//         City                     //
//                                   //
//         Planet                  //
//                                   //
//         NoneMoney           //
//         GameOver             //
//                                   //  
/////////////////////////////////
причём NoneMoney GameOver вводиться только с Memo
в виде:

NoneMoney
GameOver

Как опять же сделать так что б неисказился рисунок границы в файле при вводе с Memo данных.
Очень хотелось бы кода побольше увидеть чем теории, так как только начинаю програмировать, а в коде мне легче разобраться.

Ещё раз всем большое спасибо.

П.С. У меня получается что рисунок искажается вот так:

/////////////////////////////////
//         City                     //
//                                   //
//         Planet                  //
//                                   //
//         NoneMoney          
GameOver   //
//                                   //  
/////////////////////////////////


 
Anatoly Podgoretsky ©   (2006-02-26 14:20) [6]

А как ты этого достиг?


 
Alarm ©   (2006-02-26 14:45) [7]

Мне кажется, что зря все попытки помочь автору поста. Поскольку задача до некоторой степени очень надумана (файл, отображение в Мемо, особенно с ///).
Предложение автору: сформулируй конкретнее свои проблемы. Объясни для какой цели служат "/////...", какую они несут информацию? Можно все это понять, если это какой-либо собственный тренинг


 
Костя   (2006-02-26 16:15) [8]


> Мне кажется, что зря все попытки помочь автору поста. Поскольку
> задача до некоторой степени очень надумана (файл, отображение
> в Мемо, особенно с ///).
> Предложение автору: сформулируй конкретнее свои проблемы.
>  Объясни для какой цели служат "/////...", какую они несут
> информацию? Можно все это понять, если это какой-либо собственный
> тренинг
>


Поясняю.
В Memo грузится файл тхт, // - штуки нужны просто так, вместо них можно любое подставить, важно не то какие они, а то как вставить текст так, что б рисунок не исказился. Нечто похожее есть в ASCII.

была идея что надо вставить одну строку, я её уже решил, но вот как вставить многострочное, для меня проблема.


 
Desdechado ©   (2006-02-26 16:41) [9]

много строк - это несколько раз по одной
неужели трудно догадаться?!



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
15-1139825192
Интересующийся
2006-02-13 13:06
2006.03.12
Кактеровки на валюты, акции, нефть и золото


2-1140540575
лом
2006-02-21 19:49
2006.03.12
Send to Back


2-1140864784
ALFER
2006-02-25 13:53
2006.03.12
Работа с *.ini-файлом


8-1128180544
alsov
2005-10-01 19:29
2006.03.12
Как программно сделать mute


2-1140544115
nirvana
2006-02-21 20:48
2006.03.12
Выбор значений с помощью ADOQuery