Алгоритм чтения и замены текста - PullRequest
0 голосов
/ 02 декабря 2009

Глядя на это:

MENU_ITEM_BACK#0="Back";
MENU_ITEM_BLOCK_CHANNEL#0="Block";
MENU_ITEM_CLOSE#0="Close";
MENU_ITEM_DETAILS#0="Details";
MENU_ITEM_DIAGNOSE#0="Diagnose";
MENU_ITEM_DOWNLOAD#0="Download";

... и т. Д. (Более 500 строк). Что было бы лучшим способом автоматизировать копирование названия метки в саму метку. Например,

MENU_ITEM_BACK#0="Back";

станет

MENU_ITEM_BACK#0="MENU_ITEM_BACK";

Я наиболее знаком с Java, но не имею никаких возражений против любых других языков программирования, хотя я не очень знаком с регулярными выражениями (по крайней мере, с кодированными).

РЕДАКТИРОВАТЬ: До меня дошло, что '# 0 =' не всегда постоянны. Иногда они могут быть заменены очень произвольным числом, таким как '# 6548135 ='. Полученные ответы были хорошими, но, поскольку я не знаком с регулярными выражениями, как бы вы с этим согласились? Обратите внимание, что я не хочу копировать номер, просто метку.

Ответы [ 4 ]

2 голосов
/ 02 декабря 2009

Я думаю, что регулярное выражение - хороший выбор, при условии, что на ярлыке не может быть символов # Просто замените

^([^#]+#0)=".*";$

с

 \1="\1";

Если вы хотите сделать это в программе или скрипте, вам нужно использовать язык регулярных выражений по вашему выбору.

Если вы хотите сделать это только один раз для этого конкретного файла, вы можете сделать это с помощью sed:

$ sed -e "s/^([^#]+#0)=".*";$/\1=\"\1\"/" file
1 голос
/ 03 декабря 2009

Вы можете сделать это без регулярных выражений, используя Microsoft Word. Скопируйте часть кода в Word. Затем выберите столбец (удерживая клавишу «Alt» и выделите мышью), затем скопируйте его вправо и очистите с помощью поиска и замены.

1 голос
/ 02 декабря 2009

Используйте поиск и замену по регулярному выражению, например, с помощью Perl, sed, awk или как поддерживается многими недавними текстовыми редакторами.

В Perl это бы сработало:

my $text = <<END_YOUR_TEXT;
PUT YOUR TEXT HERE
END_YOUR_TEXT
$text =~ s/(MENU_ITEM_[^#]+)#0="[^"]+";/$1#0="$1";/g
print $text;

«$ 1» - это ссылка на совпадение в скобках, например, MENU_ITEM_BACK.

Чтобы прочитать текст из файла в командной строке, добавьте в него:

my $ text = <>;

1 голос
/ 02 декабря 2009

Регулярное выражение, например используя sed:

sed -r 's/^([^#]+)([^=]+)=.*$/\1\2="\1"/' yourfile.txt

То же самое в Python:

import sys
import re

for line in sys.stdin.readlines():
    print re.sub('^([^#]+)([^=]+)=.*$', r'\1\2="\1"', line).rstrip()

Использование:

python program.py < yourfile.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...