Thread Zeichenlimit einrichten (40 answers)
Opened by andy at 2013-05-03 14:53

FIFO
 2013-05-03 16:20
#167415 #167415
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Du kannst das auch "zu Fuß" machen, um die Perl-Basics zu lernen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use warnings;
use strict;

my $infile = 'exportiert.csv';
open (my $infile_fh, '<', $infile) or die "Kann $infile nicht lesen\n";

my $outfile = 'kurz.csv';
open (my $outfile_fh, '>', $outfile) or die "Kann $outfile nicht schreiben\n";

while (my $line = <$infile_fh>) {
    my @fields = split /;/, $line;
    for my $field (@fields) {
        if (length($field) > 30) {
            $field = substr($field, 0, 30);
        }
    }
    print $outfile_fh join(';', @fields);
}

Der Nachteil an solchem Code ist, dass er z.B. nur funktioniert, wenn die Felder nicht gequotet sind (und also auch kein Semikolon innerhalb eines Feldes auftreten kann). Deswegen gibt es ja Module wie Text::CSV, die einem diese Probleme abnehmen.
Äquivalent als Einzeiler mit Ersetzung innerhalb der Originaldatei (Backup in .bak-File), hier die Windows-Dosbox-Variante:
Code: (dl )
perl -pi.bak -e "s/([^;]{30})[^;]+/$1/g" exportiert.csv

Last edited: 2013-05-03 16:24:37 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Zeichenlimit einrichten