Уберите запятую из переменной позиции - PullRequest
0 голосов
/ 13 марта 2020

У меня есть файл:

434462PW1       5
76252PPP8       5,714.79
76252PMB2       16,950.17
76252PRC5       25,079.70
76252PNY1       30,324.50
62630WCQ8       1.09
62630WCZ8       1.09
62630WBX4       36,731.90
62630WCQ8       1.07
62630WCZ8       1.07
76252PGB9       1.07
62630WBN6       1.07
62630WBA4       1.07

Мне нужно убрать запятые из второго значения и добавить запятую между 1-м и 2-м значениями.

434462PW1,5
76252PPP8,5714.79
76252PMB2,16950.17
76252PRC5,25079.70
76252PNY1,30324.50
62630WCQ8,1.09
62630WCZ8,1.09
62630WBX4,36731.90
62630WCQ8,1.07
62630WCZ8,1.07
76252PGB9,1.07
62630WBN6,1.07
62630WBA4,1.07

Вот код. У меня проблемы с удалением только числовых значений.

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

open my $handle, '<', "foofile";
chomp(my @positionArray = <$handle>); 
foreach my $pos(@positionArray) {
        if ($pos =~ /(\w{9})\s+(.*)/) {
                if ($2=~/,/) {
                my $without = $2=~s/,//g   ;
        print "$1,$without\n";
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 13 марта 2020

Поскольку запятые появляются только во 2-м столбце, вы можете просто удалить все запятые из каждой строки. Кроме того, поскольку пробелы существуют только между вашими 2 столбцами, вы можете заменить все пространство запятой.

foreach my $pos (@positionArray) {
    $pos =~ s/,//g;
    $pos =~ s/\s+/,/;
    print "$pos\n";
}
0 голосов
/ 14 марта 2020

Другим способом является решение этой проблемы с помощью функции map (переменная массива @ для ввода и вывода).

chomp(my @positionArray = <$handle>); 
my @out = map {  $_=~s/\,//g; $_=~s/\s+/,/; $_; }  @positionArray;
use Data::Dumper;
print Dumper \@out;
0 голосов
/ 13 марта 2020

По необъяснимой причине вы сделали код более сложным, чем это может быть

use strict ; 
use warnings;
use feature 'say';

my $filename = 'foofile';

open my $fh, '<', $filename
    or die "Couldn't open $filename $!";

my @lines = <$fh>;

close $fh;

chomp @lines;   # snip eol

for (@lines) {
    my($id,$val) = split;
    $val =~ s/,//;        # modifier 'g' might be used if value goes beyond thousands
    say "$id,$val";
}

Вывод

434462PW1,5
76252PPP8,5714.79
76252PMB2,16950.17
76252PRC5,25079.70
76252PNY1,30324.50
62630WCQ8,1.09
62630WCZ8,1.09
62630WBX4,36731.90
62630WCQ8,1.07
62630WCZ8,1.07
76252PGB9,1.07
62630WBN6,1.07
62630WBA4,1.07
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...