2017-05-03 1 views
-2

J'ai besoin d'aide pour le problème suivant. J'ai un fichier avec les données suivantes.Doutes sur les données de groupe

21997|||70049,,20170428154818,20170527235959||| 
21997|||70070,,20170428154739,20170527235959||| 

21998|||70049,,20170428154818,20170527235959||| 
21998|||70070,,20170428154739,20170527235959||| 
21998|||70071,,20170428154739,20170527235959||| 

J'ai besoin d'unifier le fichier comme suit.

21997|||70049,,20170502172844,20170531235959; 70070,,20170502172844,20170531235959||| 

21998|||70049,,20170502172844,20170531235959; 70070,,20170502172844,20170531235959; 70071,,20170502172844||| 

Quelqu'un peut-il m'aider s'il vous plaît?

+3

Bonjour et bienvenue dans Stack Overflow! Nous préférons que vous montriez ce que vous avez essayé plutôt que d'écrire tout le code pour vous. Qu'avez-vous essayé? [Vous pouvez vouloir faire cela avec SQLite] (http://stackoverflow.com/a/42563133/14660). – Schwern

+1

Quelle est la taille du fichier? Les blocs sont-ils toujours groupés par la valeur dans la première colonne et séparés par \ n \ n? –

Répondre

-1
my $unified_output; 
my %out; 

open(FILE, "./raw-file.txt") or die $!; 
    my @file = <FILE>; 
close FILE; 

for (@file) {  
    next if $_ =~ /$^/;   
    my @line = split(/\|\|\|/, $_) if $_;  
    $out{"$line[0]"} .= qq~$line[1]; ~ if $_ and $_ =~ /^$line[0]/;  
} 

for (keys %out) { 
    $out{$_} =~ s!\; $!!; 
    $unified_output .= qq~$_|||$out{$_}|||\n~ if $_ and $out{$_}; 
} 
+0

Mon ami, j'ai fait un test et ça n'a pas marché. –

+1

Cher ami, Désolé, cela a fonctionné. Merci beaucoup. –

+0

Le seul problème est qu'il aurait dû générer une ligne pour chaque enregistrement, mais deux lignes ont été générées pour l'un des enregistrements. Voir ci-dessous: 21998 ||| 70049,, 20170428154818,20170527235959; 70070, 20170428154739, 20170527235959; 70071,, 20170428154739,20170527235959 ||| 21998 ||| 70049,, 20170428154818,20170527235959; 70070, 20170428154739, 20170527235959; 70071,, 20170428154739,20170527235959 ||| 21998 ||| 70049,, 20170428154818,20170527235959; 70070, 20170428154739, 20170527235959; 70071,, 20170428154739,20170527235959 ||| 21997 ||| 70049,, 20170428154818,20170527235959; 70070,, 20170428154739,20170527235959 ||| –