Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Вниз

Замена строки в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.013 c
4-1135083663
morik
2005-12-20 16:01
2006.03.12
SendMessage и Double


2-1140895834
Volkodav
2006-02-25 22:30
2006.03.12
Проект делающий exe-ки


2-1140886777
Wel
2006-02-25 19:59
2006.03.12
image


1-1139373604
Disciple2005
2006-02-08 07:40
2006.03.12
Delphi & Word


2-1140590291
nap<>
2006-02-22 09:38
2006.03.12
Процессы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский