фильтровать текстовый файл, используя несколько регулярных выражений в ruby - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть текстовый файл, содержащий текст ниже, который мне нужно отфильтровать по условию.

CODE=0xea00e60c  
CODE=0xea00e60d  
OUTPUT="HW Address: 91183010\n,HWType:00000030\n"  
CODE=0xea00e60e  
CODE=0xea01ff00

Если строка начинается с CODE, извлеките все после 0x (например, ea00e60c) из 1-й строки и вставьтев файле xyz .Если строка начинается с OUTPUT, извлеките все в двойных кавычках и вставьте в xyz файлы.Последовательность извлечения и помещения текста в файл XYZ должна быть сохранена.

  def filter_logs(filename)
    postcode = "postcode_logs"
    File.open(filename, 'r').each do |line|
      result = (line.scan(/"(.*?)"/)) || (line.split("x")[1])
      File.open(postcode, 'a') do |selected_line|
        selected_line.puts(result)
      end
    end
  end

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

В коде нет ошибок, но нет и вывода.

**Expected output**

  ea00e60c  
  ea00e60d  
  HW Address: 91183010\n,HWType:00000030\n  
  ea00e60e  
  ea01ff00



**current output**
HW Address: 91183010\n,HWType:00000030\n

1 Ответ

0 голосов
/ 14 февраля 2019

Причина, по которой это не удается, заключается в том, что #scan всегда успешно.Если ничего не найдено, возвращается пустой массив (который оценивается как истинный).Простого получения первого результата должно быть достаточно (возвращая nil для пустых массивов):

result = line.scan(/"(.*?)"/).first || line.split("x")[1]

Хотя вы также можете использовать другие методы, такие как:

result   = line[/\ACODE=0x(\h*)/, 1]
result ||= line[/\AOUTPUT="([^"]*)"/, 1]

Соответствие с самого началастроки CODE=0x, за которой следуют ноль или более шестнадцатеричных символов (\h*), фиксирующих их в группе 1, или OUTPUT=", за которыми следуют ноль или более не кавычек ([^"]*), фиксирующих их в группе 1, за которыми следует символ".

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

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