Perl - получить первое слово из строки ввода - PullRequest
11 голосов
/ 11 февраля 2011

Я пытаюсь написать программу на Perl, которая читает строки из текстового файла, и для каждой строки извлекает первое «слово» из строки и выполняет различные действия в зависимости от возвращаемой строки.

Основной цикл выглядит так:

while(<AXM60FILE>) {

   $inputline = $_;

   ($start) = ($inputline =~ /\A(.*?) /);

perform something, based on the value of string in $start

}

Входной файл на самом деле является файлом параметров, в котором имя_параметра и значение_параметра разделены двоеточием (":"). До или после двоеточия могут быть пробелы или символы табуляции.

Итак, файл выглядит (например) следующим образом:

param1: xxxxxxxxxxxx
param2: xxxxxxxxxxxxx
param3: xxxxxxxxxxxxxxxxx
param4: XXXXXXXXXXXXX

То, что "($ start) = ($ inputline = ~ /\A(.*?) /);" работает нормально для примера "param2" и примера "param3", где 1-е слово оканчивается пробелом / пробелом, но как я могу обработать ситуации "param1" и "param4", где имя_параметра сразу следует двоеточие

Кроме того, что делать, если «пробел» представляет собой вкладку или вкладки вместо пробела / пробела?

Спасибо, Jim

Ответы [ 2 ]

9 голосов
/ 11 февраля 2011

Это будет охватывать все ваши дела, а затем некоторые:

my ($key, $value) = split /\s*:\s*/, $inputline, 2;

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

6 голосов
/ 11 февраля 2011
($start) = $inputline =~ /\A([^:\s]+)/;

Это будет соответствовать всему, кроме пробелов и : в начале строки.
Или с использованием split:

($start) = split /[:\s]+/, $inputline, 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...