Рубиновый текстовый файл parsing methodolgy

У меня есть текстовый файл, где у меня много строк, которые выглядят как первый пример, и только пара, которая похожа на вторую (NB ** – это просто показать поля, которые мне нужны, они не выглядят как это в фактическом файле);

22034 BUBBA C BC-022 **OWL SOFTIE** <N/A> <N/A> <N/A> 470 0.00 **6** 0.00 **1** **37.95** 22489 BUBBA C BC- **BUNNY BOO BOO** <N/A> <N/A> <N/A> 470 0.00 **2** 0.00 **1** **24.95** 

Моя цель состоит в том, чтобы извлечь ** окруженные поля в формат (возможно, csv), поэтому я могу добавить его в качестве листа в существующую электронную таблицу Excel.

Моя проблема заключается в том, что я не могу понять, как извлечь только нужные мне данные, используя gsub, split, tr, scan, match и т. Д.

Мое первоначальное мышление состояло в том, что я разбирал каждую строку, я удалял до 4-го экземпляра пробела (который я не могу найти код для), а затем удаляю / пропускаю все между первым <и последним>, а затем пытаюсь удалите следующие 2 поля, сохраните 1, удалите следующий и сохраните оставшиеся 2.

Все это кажется чертовски трудным для достижения конечного результата.

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

Любая помощь очень ценится.

Используйте #split / #join для продолжения:

 a='22034 BUBBA C BC-022 **OWL SOFTIE** <N/A> <N/A> <N/A> 470 0.00 **6** 0.00 **1** **37.95**'.split [ a[4..-10].join( ' ' ), a[-4], a[-2], a[-1] ].join ' ' # => "**OWL SOFTIE** **6** **1** **37.95**" 

Файл с пространственным разделением, да? Это не самый … оптимальный формат.

Во всяком случае, я бы использовал regex, чтобы зацепить это поле **OWL SOFTIE**

 [7] pry(main)> m = s.match /BC-\d*\s(.*?)\s</ => #<MatchData "BC-022 OWL SOFTIE <" 1:"OWL SOFTIE"> [8] pry(main)> m.captures[0] => "OWL SOFTIE" 

а затем split чтобы захватить все остальное.

 [11] pry(main)> arr = s.split[-4..-1] => ["6", "0.00", "1", "37.95"] [12] pry(main)> arr.select.with_index {|x,i| i!=1 } => ["6", "1", "37.95"] 

Итого:

 [13] pry(main)> [s.match(/BC-\d*\s(.*?)\s</).captures[0]] + s.split[-4..-1].select.with_index {|x,i| i!=1 } => ["OWL SOFTIE", "6", "1", "37.95"] 

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

У вас есть только одно неприятное поле с переменным количеством слов в нем, поэтому начинайте с split:

 a = "22034 BUBBA C BC-022 OWL SOFTIE <N/A> <N/A> <N/A> 470 0.00 6 0.00 1 37.95".split 

Затем выделите его:

 [a[4..-10].join(' '), a[-4], a[-2], a[-1]] 
  • Сохранение файла Excel xlsx в виде файла CSV - корейский и японский трещины плохо
  • Преобразование столбцов нескольких значений в новый ключ, пары значений
  • комбинации игроков для команды в C
  • Вставка содержимого CSV-файлов в лист excel в python 2.5
  • Ошибка в ячейке даты в CSV
  • Преобразование xls в csv в python
  • Преобразовать файл xls в csv, но добавлены дополнительные строки?
  • Как закрыть и сохранить полностью открытый файл в Python?
  • Вывод CSV на несколько столбцов
  • Поиск неверно отформатированных адресов электронной почты в файле CSV
  • Обработать .xlsx до csv с помощью Powershell с использованием переименования и установки разделителя
  • Interesting Posts

    Ошибка во время выполнения Excel VBA при пакетировании 1004: Определенная пользователем или объектная ошибка

    Копирование строк с несколькими дополнительными критериями

    Как сохранить как PDF через VBA

    Превосходный цветной формат через VB 6

    Переместить курсор для записи в определенной строке текстового файла с помощью VBA

    Формула Excel для вычисления diff b / w 1-е значение и последнее значение в столбце (Excel)?

    Как скопировать строки с определенным значением в столбце на другой лист?

    Как обрабатывать имена столбцов сводной таблицы как целочисленные в сводной диаграмме (Excel)

    Автоматизация создания текстовых файлов из Excel

    Диапазон в окне сообщений ..?

    Требуемый объект Ошибка для присоединения файла к электронному письму

    Я пытаюсь использовать функцию поиска, чтобы найти место и назначить имя соседней ячейке, однако я получаю код 91 в отладчике

    Как автофильтр, смещение и копирование значений на новый лист Excel VBA

    Excel vba Удаление строки, если ячейка содержит текст

    Загрузите файл Excel с сервера поврежден – PHP

    Давайте будем гением компьютера.