Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корпоративное переименование, Алгоритм выделения слов нужных! 
:(
    Опции темы
TwisT_X
Дата 18.9.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Задание: входными данными является фаил с заданным числом сменных имен и заданным числом строк текста для исправлений..
Ниже приведен пример текста (кстати скопировал с ДРКБ  smile ):

Цитата

DRKB Explorer to DRKB Exp
DRKB to Delphi Base

Для чего нужен DRKB Explorer?
Основное назначение DRKB Explorer — расширить 
возможности стандартного DRKB, дополняя его 
значительным количеством новых, улучшенных функций.
DRKB Explorer обладает удобно организованным 
пользовательским интерфейсом и надежен в работе. 
Он легок в установке и обращении. Приложение способно 
обеспечить наиболее быстрый поиск необходимой вам 
информации в считаные секунды, используя возможности 
полнотекстового поиска, указателя, многочисленных 
фильтров, а также историю посещений и закладки. 
С DRKB Explorer вы никогда не почувствуете себя потерянным 
в океане информации.


Первые две строки - это то, что надо и на что надо заменить в тексте..
Помогите объяснить: каков должен быть алгоритм нахождения слов, которые надо заменить и заменяемые слова (алгоритм поиска первых двух строк)?!

Зарание блогадорю за участие в данной теме  smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Burka
Дата 18.9.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



ну а есть условие по которому надо искать слова? или как?


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
TwisT_X
Дата 18.9.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Цитата

ну а есть условие по которому надо искать слова? или как? 

По идеи стандартными фнкциями Pos, Copy, Delete.. или еще работать со строками как с массивом..  Но мне кажется что легче функциями..


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Burka
Дата 18.9.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: нет
Всего: 2



искать понятно что посом, я спрашиваю по какому условию слова отбирать надо?

Добавлено через 5 минут и 37 секунд
А, торможу) тебе надо простой реплейс сделать)

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

если я правильно понял что тебе нужно)


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
TwisT_X
Дата 18.9.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Цитата

по какому условию слова отбирать надо? 

Ну в первых двух строках указаны слова:
Перед to то что надо заменть, а после to то на что надо заменить..


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
lukas
Дата 19.9.2007, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



так... берем любую функцию для нахождения N-слова в строке, и делаем так...

1. находим количество слов..
2. делаем цикл от 1 до N слов... выделяем каждое слов... 
3. заменяем его... как хотим...

Посмотри на функции ParamStr и ParamCount, переделай их под себя... и все....  smile (Для просмотра функции CTRL+Клик на ее название)


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
TwisT_X
Дата 19.9.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Цитата

Посмотри на функции ParamStr и ParamCount, переделай их под себя...

Для меня это еще пока что слишком новое  smile 

Мне самое главное это понять как выделить слова которые надо заменить и слова заменяемые(первые две строки) я не могу додуматься какой там должен быть примерно алгоритм  smile 

Это сообщение отредактировал(а) TwisT_X - 19.9.2007, 15:49


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
lukas
Дата 19.9.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



ну когда находим слово.... специальной функцией.... находим и начало B этого слово... и само слово (значит знаем его длину), затем удаляем все от B по длину слова, и вставляем (Insert) в позицию B нужное слово... переходим к следующему слову...  smile 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
TwisT_X
Дата 19.9.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Цитата

находим и начало B этого слово

1. что такое "В" ?!
2. мне надо понять алгоритм: как прога поймет какие слова искать и на что заминять (в данном случае первые две строки)..
3. а дальше уже легко будет  smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
lukas
Дата 19.9.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



TwisT_X, 

блин... B - это типа позиция начала слова в строке... как как поймет...

функция ParamCount - количество слов в строке...  и получается цикл..

for I:=0 to ParamCount("строка") do 
 begin
   //ParamStr("строка",I);
 end;

Во общем посмари на мои функции....

Код


function GetPRMCount(S:String; Typ:Char):integer;
var
  i,pos_p,k:integer;
  len:integer;
  Stroka:boolean;
begin
 len:=Length(s);  stroka:=false;  pos_p:=1;
 i:=0;
 while (i<>len) do
  begin
 Inc(i);
    if S[i]='"' then stroka:=not(stroka);
    if stroka then continue;

     if (S[i]=Typ)and(S[I+1]<>'') then Inc(pos_p);
   end;
  Result:=Pos_p;
end;

function GetFastParam(S:String; N:byte; Typ:Char; Kav:Boolean = false):String;
  var
  i,k,pos_p,pos_b,pos_f:integer;
  len:integer;
  Stroka:boolean;
  label fin;
begin
 {найдем позицию разделителя N-ого параметра}
 len:=Length(s);  stroka:=false;  pos_p:=1;  pos_f:=1;
 pos_b:=1;
 if GetPRMCount(s,Typ)=1 then begin
    Result:=S;
    if Result[len]=Typ then
     delete(result,len,1);

    goto fin;
 end;
 i:=0;
 while (i<>len) do begin
    Inc(i);
    if i=1 then
     if Pos_P=N then
     begin    // нашли начальный разделитель
         pos_b:=i;
         break;
     end;
    if S[i]='"' then stroka:=not(stroka);
     if stroka then continue;

     if S[i]=Typ then Inc(pos_p);
     if Pos_P=N then
     begin    // нашли начальный разделитель
         pos_b:=i;
         break;
     end;
 end;
 {теперь ищем первый попавшийся}
 i:=Pos_B;
 while (i<>len) do
  begin
  Inc(i);
     if S[i]=Typ then
     begin
       Pos_F:=I;
       break;
     end;
   end;
   if pos_f=1 then pos_f:=len;

 i:=Pos_F-Pos_B; // находим длину параметра

 if Pos_B<>1 then begin
  if Pos_F<>len then
   Result:=Copy(S,Pos_B+1,i-1)
  else
   Result:=Copy(S,Pos_B+1,i+1)
 end else
 Result:=Copy(S,Pos_B,i);
 {---- убираем лишние символы ----}
fin:
 Result:=Trim(Result); len:=Length(Result);
 if Result='' then exit;
if not Kav then
  begin
 if (Result[len]in ['"',Typ])and(Result[1]='"') then
 begin
 delete(Result,Len,1);
 delete(Result,1,1);
 end;
  end;
end;


В общем использовать примерно так...

ShowMessage(GetFastParam('слово1, слово2, "слово3"  , слово4',3,',')); // слово номер 3, разделительный символ запятая... 

Подстрой под себя функции... ну или юзай пос и инсерт, делет... и т.п.


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
TwisT_X
Дата 20.9.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



lukas, ты мну натолкнул на идею..  smile 
Вот тока вопрос такой: есть ли оператор который с мемо считывает строку и перегоняет ее в переменную?! smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Alix
Дата 21.9.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Код

  // записываем i+1 строку в переменную s
   s := memo1.lines[i];


Можно я тут вас попугаю? Если действовать согласно правилам 
Цитата
DRKB Explorer to DRKB Exp
DRKB to Delphi Base
 последовательно, то строка "DRKB Explorer" в итоге станет "Delphi Base Exp". Это нормально или надо избегать замены уже замененных ранее подстрок?

Это сообщение отредактировал(а) Alix - 21.9.2007, 16:37


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
TwisT_X
Дата 21.9.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



хм.. А как указать максимальную строку в мемо?! (ну кол-во строк в мемо)
и если  s := memo1.lines[i];  мы  записываем i+1 строку в переменную s, то как записать i строку?!
Типо s := memo1.lines; ?!




Alix, канешо можешь попугать))
Надо избегать замены уже замененных ранее подстрок))
Я вот еще думаю как оформить алгоритм: или загрузить текст в мемо и работать исключительно мемо или просто сразу работать с файлом..
Может кто то подскажет как лучше или легче?!  smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Alix
Дата 21.9.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Строки в memo.lines нумеруются от 0 до memo.lines.count-1. Поэтому когда мы обращаемся к строке [i] мы обращаемся к i+1 строке.

Лучше работать сразу с файлом, из одного пишем, в другой, временный, пишем, потом удаляем исходный и переименовываем временный.

Судя по Вашим вопросам, мучаться вы будете долго. Рекомендую почитать про алгоритмы поиска и замены строк.


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
TwisT_X
Дата 21.9.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Alix, вы почти угадали  smile 
У меня еще нету с этим опыта.. Меня заинтересовали функции: ParamCount и  ParamStr..
Но пока я про них еще ниче не знаю и не нашел покачто  smile 
Не могли бы както об этом нимного рассказать?!


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.