Schrift
[thread]8950[/thread]

Matching greift nicht!: CSV spliten und Werte prüfen



<< >> 3 Einträge, 1 Seite
krusty
 2007-04-26 17:39
#76276 #76276
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo,

habe eine CSV Datei die pro Zeile eine ober mehrere 6stellige Buchstaben bzw. Ziffernfolge bzw. gemischt Ziffern und Buchstaben sein kann.
Bsp: ABS678;GTR999;O87UJN;
Davon gibt es dann so um die 1600 Zeilen.

Ich möchte nun ein Skript haben, das prüft, ob pro Zelle jeweils ein 6 stelliger Wert steht. Oder aber kein Wert. Also die Zelle leer ist. Pro Zeile gibt es nämlich 50 Zellen, getrennt durch Semikolon. Wenn das nicht der Fall ist soll ein Counter hochgezählt werden, der mir am Ende des Scriptes eine Ausgabe gibt, wie viele nicht Übereinstimmungen gefunden worden sind.

Folgendes Script habe ich bereits geschrieben.
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
23
24
25
26
27
28
#!/usr/bin/perl
use warnings;
use strict;

my $path = "/scripte/csv";
my $csv = "test.csv";
my @werte = ();
my $count = 1;

open(FILE, "<$paht/$csv") || die "Cannot open file $csv!\n";
while(<FILE>)
{
    @werte = split(";");
    foreach my $value (@werte)
    {
         chomp($value);
         if(( $value !~ /^[A-Z0-9]{6}$/ ) && ( $value !~ /^$/ ))
         {
               $count++;
         }
    }
}
close(FILE);

if ( $count > 1 )
{
    print "DEBUG: ".$count." Fehler gefunden\n";
}


Mein Problem ist jetzt, das er mir noch einen Wert von ca. 1580 ausgibt. Für mich sieht das nach den Zeilen der Datei aus. Irgendetwas scheint noch in einer Zelle zu sein. Vermute mal das es ein Return oder ähnliches ist das in der letzten Zelle steht. Nur wie bekomme ich das abgefangen?
Stehe momentan auf dem Schlauch, wie ich das abfangen kann.

Könnt ihr mir einen Hinweis geben?
krusty
 2007-04-26 17:57
#76277 #76277
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Habe das Problem beheben können.
Habe noch vor dem split folgende Zeile eingebaut.
Code (perl): (dl )
$_ =~ s/\r\n//g;


Jetzt bekomme ich nur noch angezeigt wenn wirklich was nicht passt. :laugh:

Naja, wenn ich immer so schnell die Lösung finden würde. :p

Greetz
Froschpopo
 2007-04-26 19:42
#76278 #76278
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Wenn @werte keine Datensatz-Trennenden-Leerzeichen besitzt brauchst du doch eigentlich kein chomp.
Wer schreibt denn @werte ("kriterium1\n", "kriterium2\n")
da kannst du das \n doch gleich weglassen.
Es sei denn, in @werte befindet sich der Inhalt aus einer Kriterien-Datei\n\n

<!--EDIT|Froschpopo|1177602230-->
<< >> 3 Einträge, 1 Seite



View all threads created 2007-04-26 17:39.