Hallo,
Um welche Datenmengen handelt es sich denn?
In der Datei sollen zukünftig ca. 100 Einträge zu finden sein.
Na, das dürfte nicht zu wirklcihen Problemen führen.
Ich habe das Skript jetzt so geschrieben, jedoch funzt es immernoch nicht. :-(
open(DATEI,"<muster.csv") || die "Datei nicht gefunden";
while(@zeile = <DATEI>)
{
$aid = substr($zeile,0,6);
$mid = substr($zeile,8,6);
print "A-ID: $aid, M-ID: $mid<br>";
my @entries = split( /;/ ,$zeile);
print "URL: $entries[5]";
}
close(DATEI);
Was hab ich falsch gemacht?
1.)@zeile = <DATEI>
Das wird genau einmal aufgerufen, nämlich um ein Array mit dem gesamten Inhalt der Datei zu füllen. Somit wird der Block der While-Schleife maximal einmal durchlaufen.
Gleichzeitig ergibt sich dadurch, daß $zeile nie mit einem Inhalt versehen wird, wordurch alles weitere im Block zu keinen brauchbaren Ergebnisssen führt.
2.) Du hast den Sinn, bzw. deren Unterschiede, von substr und split noch nicht verstanden.
substr kannst Du verwenden, wenn Du genau weißt wieviele Zeichen Du aus einer Zeichenkette ab einer bestimmte Stelle ermitteln willst.Das Ergebnis wird immer ein einzelener Wert, also ein Skalar, sein.
split wirst Du verwenden, wenn Du die Zeichenfolge an bestimmten Zeichen, oder auch Zeichenfolgen, trennen willst. Das Ergebnis wird immer eine Liste von Werten sein.
Dein Problem kannst Du ohne weiteres nur mit split lösen.
3.) Du verwendest nicht 'use strict;'. Würdest Du es verwenden, so hättest Du schon eher gesehen, daß @zeile und $zeile zwei vollkommen verschiedene Variablen sind, und daß dann irgendetwas nicht stimmt.
Hier nocheinmal ein Beispiel (allerdings nicht genau Deines und nicht zu sehr perlish):
#!/usr/bin/perl -w
use strict;
open(IN,'was_auch_immer') or die 'Kann was_auch_immer nicht oeffnen: '.$!;
my($eingangszeile);
while($eingangszeile = <IN>)
{
chomp $eingangszeile; # damit die Zeilenumbrueche entfernt werden
my(@werte) = split(/;/,$eingangszeile);
# Ab hier wird was mit @werte gemacht
}
close(IN) or die 'verd..., zumachen von was_auch_immer geht nicht: '.$!;
jetzt könntest Du noch einige Verfeinerungen anbringen. Wenn Du etwa vorher weißt, wie viele Spalten (hier acht) Deine Zeile haben wird
my(@werte) = split(/;/,$eingangszeile,8);
Oder Du könntest auch gleich Variablen befüllen, um es lesbarer zu machen
my($name,$vorname,$strasse,$ort,$plz,$email,$url,$telefon) = split(/;/,$eingangszeile,8);
uswusf...
Grüße
Klaus