Perl читает конфигурационный файл без использования модулей - PullRequest
2 голосов
/ 23 февраля 2011

Допустим, у меня есть файл конфигурации.

Config.csv

Server,Properties
"so-al-1","48989"
"so-al-3","43278"
"so-al-5","12345"

Мне нужно использовать Perl-скрипт для извлечения сервера и свойств из файла, чтобы использовать значения переменной в моем скрипте. Также наш клиентский сервер не хочет, чтобы мы устанавливали какие-либо модули.

Итак, как мне читать этот документ в переменных без использования модуля?

open(FILE,"Config.csv");
undef($/); #sucks the entire file in at once
while(<FILE>){
    (@words)=split(/\s+/);  
}
close FILE;

for (@words){
    s/[\,|\.|\!|\?|\:|\;]//g; #removed punctuation
    $word{$_}++;
}

for (sort keys %word){
    print "$_ occurred $word{$_} times\n";
}

Я попробовал вышеописанное, но это не помещает его в хеш, который я хотел.

Отредактировано: я скопировал код слишком быстро и пропустил строку.

Отредактировано: я только что узнал, что такой вопрос уже есть в StackOverflow. Как я могу проанализировать процитированный CSV в Perl с регулярным выражением?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

После обычного предупреждения «Вы должны использовать модуль CSV», это работает:

#!/usr/bin/env perl
use warnings;
use strict;

my $header_str=<DATA>;
chomp $header_str;
my @header=$header_str =~ /(?:^|,)("(?:[^"]+|"")*"|[^,]*)/g;
my %fields;
my @temp;
my $line;

while($line=<DATA>){
    chomp $line;
    @temp = $line =~ /(?:^|,)("(?:[^"]+|"")*"|[^,]*)/g;
    for (@temp) {
        if (s/^"//) { 
            s/"$//; s/""/"/g;
        }
     }

     $fields{$temp[0]}=$temp[1];
}

print "$_\t\t" for (@header);
print "\n";
print map { "$_\t\t$fields{$_}\n" } sort keys %fields;

__DATA__
Server,Properties
"so-al-1","48989"
"so-al-3","43278"
"so-al-5","12345"

Выход:

Server      Properties      
so-al-1     48989
so-al-3     43278
so-al-5     12345
0 голосов
/ 23 февраля 2011
#!/usr/bin/perl
use warnings;
use strict;

while (<DATA>) {
    chomp;
    next unless my($key,$value) = split /,/;
    s/^"//, s/"$// for $key, $value;
    print "key=$key value=$value\n";
}

__DATA__
Server,Properties
"so-al-1","48989"
"so-al-3","43278"
"so-al-5","12345"
...