Thread CSV Feldlänge bestimmen (16 answers)
Opened by sara456 at 2014-05-23 16:54

sara456
 2014-05-23 16:54
#175681 #175681
User since
2014-04-22
13 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich habe wieder ein Problem. Ich bin in Perl sehr neu und habe immer wieder
Schwierigkeiten.
Also ich habe eine CSV-Datei, deren Inhalt ich in eine andere CSV-Datei einfügen möchte. Beim Einfügen möchte ich auch die Länge der Felder festsetzen.
Mein Input Datei besteht aus 6 Feldern:
12;;654;Test;12345;Test
13;;265;Test;12345;Test

Diese Daten möchte ich in eine andere CSv Datei schreiben, nur mit fester Länge bestimmen. Dafür habe ich eine weiter CSv-Datei, wo die Länge definiert ist:
Mein Mapping_CSV sieht wie folgt aus (Ich möchte nur die Nummerischen Felder betrachten):
Stelle Länge Typ
1 5 Numerisch
2 6 Numerisch
3 9 Numerisch
4 14 Alphanumerisch
5 5 Numerisch
6 28 Alphanumerisch

Die Stelle 1, also das Feld ist in diesem Fall, das erste Feld in der Input-Datei. Diese soll die Länge 5 haben in der Output-Datei.

Das erste Feld in der Input Datei, hat die Länge 2, aber da es die Länge 5 haben soll, soll es vorne mit nullen befüllt werden.
Es soll mir die Länge der Numerischen Felder mit der Länge in der Mapping -Datei überprüfen und falls dies nicht gleich ist, diese vorne mit nullen befüllen. Ist es überhaupt machbar?

Als Output möchte ich
00012;000000;000000654;Test;12345;Test
00013;000000;000000265;Test;12345;Test

Der bisherige Code: bin gerade beim Einlesen, Ich weiß leider nicht, wie ich die Mapping-Datei mit Inpu-Datei vergleichen soll

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!C:/Programme/Perl

use strict;
my $input='Input.csv';
my $output='Output.csv';
my $mapping='Input_mapping.csv';
my $zeileDaten;
my @arrayDaten;
my $inputDaten;
my @inputarray;

open MAPPING, "<$mapping" or die "Datei $mapping konnte nicht geöffnet werden";

while (<MAPPING>){
chomp;
#print "$_\n";
$zeileDaten ="$_\n";
@arrayDaten = split(/;/,$zeileDaten);
push(@arrayDaten,$zeileDaten);


}

close(MAPPING);


#open OUTPUT, ">$output" or die "Datei $output konnte nicht geöffnet werden";
open INPUT, "<$input" or die "Datei $input konnte nicht geöffnet werden";

while (<INPUT>){

$inputDaten ="$_\n";
@inputarray= split(/;/,inputDaten);
push(@inputarray,$inputDaten);


}


Vielen Dank im Voraus.

View full thread CSV Feldlänge bestimmen