use strict;
use diagnostics;
use warnings;
use autodie qw(open close);
use Data::Dump qw(dump);
#declare variables
my %hash;
my $data;
#opening Files using autodie to cut typing...
open my $in, '<', "Test_Data_RandNumbers.txt";
open my $in1, '<', "Test_Data_More_RandNumbers.txt";
open my $out, '>', "OUT_Test_Data_Ita_SpanFren_rest.txt";
open my $out1, '>', "OUT_Test_data_NO_match_SpanFren.txt";
#open my $out2,'>' , "./Test_Data_Out_None_Match.txt";
while (<$in>) {
#data manipulation to clean up ='s and ,'s
#dieci = diez, zehn -->worse case, remove spaces and = and comma;
#quattro = quatro -->only one number with spaces or not in from of =...
chomp;
my ( $ita, $spa, $num ) = split(/[=\s,]+/); # removes '=' or 's' or ',' & '+' to match 1 or more these characters
$hash{$ita}[0] = $spa;
#what about if there is no $num at position 1 in 1st file?
if ( !defined $num ) {
$hash{$ita}[1] =
$num; # if defined then keep it for check later in position 2 in array
}
}
close $in;
while (<$in1>) {
chomp;
my ( $ita, $fren, $num1, $num2 ) = split(/[=\s,]+/); #creates col of numbers
$hash{$ita}[1] = $fren; #now hashs format will look like this: ita=> spa fren
#define if there is are numbers in position 3 and 4 concat to position 3
if ( defined($num1) and defined($num2) ) {
$hash{$ita}[3] = $num1
. $num2; # concat if numbers defined in poition 1 and 2 and store in 3
}
elsif ( defined $num1 ) {
$hash{$ita}[3] =
$num1; #if array has num in pos 2 then save number in position 3(dieci)
}
}
close $in1;
foreach my $ita ( keys %hash ) {
if ( $hash{$ita}[0] and $hash{$ita}[1] ) {
print $out "$ita =>", join( ',', @{ $hash{$ita} } ), "\n"; #line 54
}
else {
print $out1 "$ita =>", join( ',', @{ $hash{$ita} } ), "\n";
}
}
close $out;
close $out1;
####
Test_Data_More_RandNumbers.txt:
due =deux, two,
tre = trois,drei,
attro = quatre,four
cinque = cinq,funf, five
sei = six , six
sette = sept , seven ,sechs
dieci =dix
undici = onze,eleven
tredici = treize,thirteen, dreizehn
Test_Data_RandNumbers.txt:
uno = uno,eins
due = dos,zwei
tre = tres,drei
quattro = quatro
cinque = cinco,funf
sei = seis,
sette = siete,sechs
otto = ocho
nouve = nueve, neun
####
C:\Users\Fred\Desktop\pm>type OUT*
OUT_Test_Data_Ita_SpanFren_rest.txt
sei =>seis,six,,six
quattro =>quatro,quatre,,four
due =>dos,deux,,two
sette =>siete,sept,,sevensechs
cinque =>cinco,cinq,,funffive
tre =>tres,trois,,dreithree
OUT_Test_data_NO_match_SpanFren.txt
dieci =>,dix
uno =>uno
nouve =>nueve
otto =>ocho,
undici =>,onze,,eleven
tredici =>,treize,,thirteendreizehn