Искать строку текста (в качестве критерия поиска) и заменять определенную строку цифр в этой строке? - PullRequest
0 голосов
/ 09 марта 2011

У меня довольно обширный файл autolisp (примерно 4000 строк), который записывает в файл большой разделенный запятыми список номеров элементов и их описания. вот пример (все они выглядят так же, как это, за исключением номера и описания)

>(write-line (strcat "0203," (itoa 1-2x4x8) ",    PCS   2x4x 92 5/8 STUD GRADE FIR" ) file)

«0203» - это номер элемента, а «2x4x 92 5/8 STUD GRADE FIR» - это описание, не обращайте внимания на запятые или PCS (расшифровывается как «кусочки»), они не имеют значения. важно то, что мне нужно изменить этот номер, чтобы он соответствовал новому списку. вот где я верю, что регулярные выражения могут помочь, но мне трудно это выяснить.

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

Номер всегда будет 4 цифрами, расположенными точно так, как показано, описание будет только когда-либо встречаться в файле (они точны), описание и связанный номер, который мне нужно заменить, всегда будут в одной строке.

пожалуйста, помогите:)

1 Ответ

0 голосов
/ 09 марта 2011

Не уверен, что регулярное выражение поможет вам в этом. Регулярное выражение наиболее полезно, если вы ищете строки с повторяющимися шаблонами и, при необходимости, заменяете шаблон фиксированным текстом или значением, совпадающим с другим шаблоном в строке.

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

На мой взгляд, вам нужно создать регулярное выражение для каждого из ваших текстов поиска и шаблон подстановки для старого на новое число, что-то вроде (в команде vi-вида):

s!\d+,(.*2x4x 92 5/8 STUD GRADE FIR)!1234,\2!

Это соответствует 4-значному числу и запятой, за которыми следуют материал и текст поиска. Подстановка заменяет все это на «новое» число, запятую и соответствующую группу захвата. Но создание этих регулярных выражений - это, по сути, больше работы, чем замена вручную в файле ...

...