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

hlubenow
 2014-05-23 17:15
#175684 #175684
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
2014-05-23T14:54:26 sara456
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

sprintf() kann mit Nullen befüllen. Man könnte es sonst auch von Hand (mit einer eigenen Funktion) machen, aber so dürfte es am einfachsten sein.
Ein Beispiel mit 6 Stellen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use warnings;
use strict;

my @a = ("12;;654;Test;12345;Test", "13;;265;Test;12345;Test");

foreach my $line (@a) {
    chomp($line);
    my @b = split(";", $line);
    foreach my $i (@b) {
        if ($i eq "") {
            # Assigning a value to $i here changes @b too:
            $i = "000000";
        }
        # isdigit?:
        if ($i !~ /\D/) {
            $i = sprintf("%06d", $i);
        }
    }
    print join(";", @b) . "\n";
}

Ach so, wahrscheinlich kommt gleich jemand und sagt, Du solltest das Modul "Text::CSV" benutzen.
Last edited: 2014-05-23 17:18:58 +0200 (CEST)

View full thread CSV Feldlänge bestimmen