Автор Тема: Замена текстовых строк  (Прочитано 4756 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« : 21 Июня 2001, 13:41:54 »
Ситуация такая
есть примерно 100 строчек текста
который надо менять
формат этих строк такой

s.malevskiy\\:\\tmalevsia
m.landau\\:\\tlandamik
k.paharelau\\:\\tpaharkan

так вот надо брать первое слово например
s.malevskiy
и заменять всю строчку на
s.malevskiy\\:\\ts.s.malevskiyNEW_NAME

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

s.malevskiy\\:\\ts.malevskiyNEW_NAME
m.landau\\:\\tm.landauNEW_NAME
k.paharelau\\:\\tk.paharelauNEW_NAME

Причем все эти замены должны происходить не во всем файле
а например начиная от строки
BEGIN
и до строчки
END
....
Может подскаджете как это лучше реализовать?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Замена текстовых строк
« Ответ #1 : 21 Июня 2001, 14:34:10 »
perldoc perlop в части s///
perldoc perlre
2B OR NOT 2B = FF

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« Ответ #2 : 21 Июня 2001, 18:31:11 »
Цитировать
Chs (21-06-2001 14:34):
perldoc perlop в части s///
perldoc perlre

да читаю... но пока не получается нифига
может кусочек кода кто подкинет.. для ориентиру?

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Замена текстовых строк
« Ответ #3 : 21 Июня 2001, 21:18:22 »
Цитировать
UltraMax (21-06-2001 18:31):
да читаю... но пока не получается нифига
может кусочек кода кто подкинет.. для ориентиру?
#!/usr/bin/perl
$file="s.malevskiy\\:\\tmalevsia
BEGINs.malevskiy\\:\\tmalevsia
m.landau\\:\\tlandamik
k.paharelau\\:\\tpaharkan
END
";
if ($file=~ m/BEGIN(.*)END/s)
{
$str = $1;
$str=~ s/([\\w|\\.]+)(\\:\\t)\\w+/$1$2$1NEW_NAME/g;
$file=~ s/(BEGIN).*(END)/$1$str$2/s;
}
print $file;
С тебя - пиво.:)
2B OR NOT 2B = FF

  • Гость
Замена текстовых строк
« Ответ #4 : 22 Июня 2001, 00:45:06 »
Цитировать
Chs (21-06-2001 21:21):
С тебя - пиво.:)

Ох сопьешся :)

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Замена текстовых строк
« Ответ #5 : 22 Июня 2001, 09:40:38 »
Цитировать
NAS (22-06-2001 00:45):

Ох сопьешся :)
Да нет - я же, например, во Владивосток за пивом не поеду.:):)
2B OR NOT 2B = FF

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« Ответ #6 : 22 Июня 2001, 11:31:46 »
Пиво значит пиво! Могу и водовку :)
Тока дело в том, что я в Минске живу....
Приезжай - спою! :)

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« Ответ #7 : 22 Июня 2001, 11:58:48 »
CHS - что-то не то в твоем коде
у тебя идет замена толькро тех трех строк, которые были в примере
...
может я не совем точно выразился
мне надо в тексте, начиная от строчки BEGIN и до строчки END, заменить все строчки
по принципу, взять первое слово, которое представляет собой следющий формат буква, потомт точка, и потом остальные симывы. Затем там дальше идет символ табуляции, и потом еще текст
Мне надо оставить лишь первое слово, которое с точкой, потом вставить табуляцию, и повторить первое слово (которо мля с точкой мля :))и добваить к нему текст везде одинаковый, например NEWNAME
пример - было
a.kasyanau:\\tkasyaand
надо чтобы стало
a.kasyanau:\\ta.kasyanauNEWNAME
.....
но только не во всем тексте, а в промежутке от BEGIN о END
вот такая задача... а пример тут не совсем помоему подходит

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Замена текстовых строк
« Ответ #8 : 22 Июня 2001, 12:27:04 »
Цитировать
UltraMax (22-06-2001 11:58):
CHS - что-то не то в твоем коде
у тебя идет замена толькро тех трех строк, которые были в примере
...
может я не совем точно выразился
мне надо в тексте, начиная от строчки BEGIN и до строчки END, заменить все строчки
по принципу, взять первое слово, которое представляет собой следющий формат буква, потомт точка, и потом остальные симывы. Затем там дальше идет символ табуляции, и потом еще текст
Мне надо оставить лишь первое слово, которое с точкой, потом вставить табуляцию, и повторить первое слово (которо мля с точкой мля :))и добваить к нему текст везде одинаковый, например NEWNAME
пример - было
a.kasyanau:\\tkasyaand
надо чтобы стало
a.kasyanau:\\ta.kasyanauNEWNAME
.....
но только не во всем тексте, а в промежутке от BEGIN о END
вот такая задача... а пример тут не совсем помоему подходит
А теперь еще раз - двоеточие между словами есть или нет? На словах - нет, в примере - есть.
Если его нет, то выкини из текста везде \\: и все будет хорошо.
Примеры надо нормальные приводить или объяснять четко.:):)
А то я пример и первую постановку отработал вполне четко - а тыЖ не работает, не работает...:):):)
2B OR NOT 2B = FF

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« Ответ #9 : 22 Июня 2001, 12:41:33 »
Епрст :)
да дело не в : есть оно или нет
чтобы тебе было проще
есть строчки

asdjfghsdfjhgsdjfhgsdfj
lkgjlfkgjflkjg

BEGIN
a bobo
b bobo
c bobo
...
END

flkghl;fgsdfghs
a\'flkgjs;dflkgj;flk
]
так вот нужно открыть файл
open(FILE,\'+и в нем заменить ТОЛЬКО В ЭТОМ ДИАПАЗОНЕ
строчки на

BEGIN
a aNEWNAME
b bNEWNAME
c cNEWNAME
...
END

Вот какая задача :)

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« Ответ #10 : 22 Июня 2001, 13:39:09 »
Короче я вот что написал

open(FILE,\'+$str=join(\'\',);
if ($str=~ m/BEGIN(.*)END/s)
{
$str = $1;
$str=~ s/([\\w|\\.]+)(\\:\\t)\\w+/$1$2$1NEWNAME/g;
print FILE $str;
}
close(FILE);

он находит строки между BEGIN и END
и меняет
Вот для наглядности

из

y.novik:    erick

BEGIN
y.novik:    erick
m.filippov: filipmax
END

получается вот что

y.novik:    erick

BEGIN
y.novik:    erick
m.filippov: filipmax
END

y.novik:    y.novikNEWNAME
m.filippov: m.filippovNEWNAME

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

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Замена текстовых строк
« Ответ #11 : 22 Июня 2001, 14:54:13 »
Цитировать
UltraMax (22-06-2001 12:41):
Епрст :)
да дело не в : есть оно или нет
чтобы тебе было проще
есть строчки

asdjfghsdfjhgsdjfhgsdfj
lkgjlfkgjflkjg

BEGIN
a bobo
b bobo
c bobo
...
END

flkghl;fgsdfghs
a\'flkgjs;dflkgj;flk
]
так вот нужно открыть файл
open(FILE,\'+и в нем заменить ТОЛЬКО В ЭТОМ ДИАПАЗОНЕ
строчки на

BEGIN
a aNEWNAME
b bNEWNAME
c cNEWNAME
...
END

Вот какая задача :)
Если между a и bobo символ табуляции, то:
#!/usr/bin/perl
open(FILE,\'+seek(FILE,0,0);
@strs=;
$file=join(\'\',@strs);

if ($file=~ m/BEGIN(.*)END/s)
{
$str = $1;
$str=~ s/([\\w|\\.]+)(\\t)\\w+/$1$2$1NEWNAME/g;
$file=~ s/(BEGIN).*(END)/$1$str$2/s;
}

seek(FILE,0,0);
print FILE $file;
truncate(FILE,tell(FILE));
close(FILE);
С тебя - пиво.:)
2B OR NOT 2B = FF

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Замена текстовых строк
« Ответ #12 : 22 Июня 2001, 16:23:44 »
Ну все заработало, как и надо!
С меня пиво :) © твои же

Оффлайн Павел

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
Замена текстовых строк
« Ответ #13 : 17 Августа 2001, 11:29:58 »
$str=~ s/([w|.]+)(:t)w+/$1$2

Недочет!!! Так как символ "|" в квадратных скобках буде рассматриваться как просто символ, а не или. Хотя работтать все-равно будет.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28