User since
2008-06-18
31
Artikel
BenutzerIn
Hallo !
Ich bin Neuling in der PERL Programmierung und noch in der Ausbildung.
Ich soll aus einer .txt Datei jede Zeile auslesen und spliten, sodass ich diese mit einer 2ten .txt Datei, wo ic hdas gleiche machen muss, vergleichen kann und dann eine Ausgabe mache.
Mein Problem ist mehr am Anfang. Ich kriege es hin die erste Zeile zu nutzen und im Array test ist jetzt gesplitet die erste Zeile. Aber wie kriege ich es hin das das Programm sich Zeile für Zeile vornimmt und das splitet.
Das habe ich bis dato:
open(SOLLDATEI,"<a.txt");
$solldatei = <SOLLDATEI>;
@test = split(/;/, $solldatei);
print join("\n",@test[1]);
Hab schon gegoogelt aber ich komme nicht weiter.
Danke im vorraus.
cherished
User since
2006-01-27
3890
Artikel
HausmeisterIn
Hi,
zeilenweises Einlesen machst Du mit einer while-Schleife.
open my $handle, '<', $dateiname or die "$dateiname: $!";
while ( my $line = <$handle> ) {
}
close $handle;
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
User since
2008-06-18
31
Artikel
BenutzerIn
Linuxer+2008-06-18 11:35:08--Hi,
zeilenweises Einlesen machst Du mit einer while-Schleife.
open my $handle, '<', $dateiname or die "$dateiname: $!";
while ( my $line = <$handle> ) {
}
close $handle;
Sehr Vielen dank für diese schnelle Antwort.
Werde das direkt mal weiter testen und wenn ich nicht witerkomme melde ich mich =)
User since
2003-08-04
14371
Artikel
ModeratorIn
So liest man eine Datei zeilenweise ein:
my $file = 'a.txt';
open my $filehandle, '<', $file or die $!;
while( my $ziele = <$filehandle> ){
}
close $filehandle;
Du solltest
lexikalische Filehandles nehmen. Und die 3-Arg-Form von open (siehe auch
perldoc -f open). Und Fehlerbehandlung (das
or die $!) sollte auch gemacht werden.
User since
2008-06-18
31
Artikel
BenutzerIn
Also ich habe das jetzt so weit hinbekommen nur ein Problem habe ich jetzt.
Wie sollte man das am besten lösen wenn man den inhalt also eine zeile mit 4 spalten jeweils hat und mit jedem element arbeiten will.
Bsp: Was ich machen muss !
a.txt
10_01;23;22364;29864
10_02;24;22365;29865
10_03;25;22366;29866
10_04;27;22367;29868
10_05;23;22323;29834
b.txt
10_08;24;222364;3329864
10_02;24;22365;29865
10_14;27;22767;29768
10_15;23;22323;29834
10_16;27;2231264;21219864
so sehen die aus. Erste Spalte ist die ID. A.txt ist der SOLL zustand B.txt der IST .
Jetzt muss ich halt die erste ID von a.txt nehmen die in der b.txt suchen und dann spalte 2 mit 2 vergleichen und 3 mit 3 ... bis n.
Wenn alles gleich ist halt inner Ausgabedatei sagen. Jo ID XXX ist gleich.
Wie geh ich am besten vor ?
User since
2003-08-04
14371
Artikel
ModeratorIn
Arbeite am Besten mit
DBI zusammen mit
DBD::CSV. Damit kannst Du a.txt und b.txt wie Datenbanken behandeln und ganz normale "SELECT"-Statements absetzen...
Siehe auch diesen
Artikel.
User since
2008-06-18
31
Artikel
BenutzerIn
ist ne coole Sache nur das Problem ist bis ich mcih da rein gelesen haeb vergehen einige tage ... die hab ich nicht.
gibts da nen kompaktere tuto oder so ?
User since
2003-08-04
12208
Artikel
Admin1
also kürzer als der von renee verlinkte artikel würd ichs kaum bringen. dafür braucht man
doch nicht mehrere tage...
User since
2008-06-18
31
Artikel
BenutzerIn
bin dohc nur ein armer SI ...
Ich bin jetzt soweit , aber der vergleicht bei mir die Strings nicht.
geht das in Perl nicht?
my $solldatei = 'a.txt';
my $istdatei = 'b.txt';
open my $filehandle, '<', $solldatei;
open my $filehandle1, '<', $istdatei;
while( my $ziele = <$filehandle> )
{
@test = split(/;/, $ziele);
while( my $ziele1 = <$filehandle1>)
{
@test1 = split(/;/, $ziele1);
if(@test[0]==@test1[0])
{
print "@test[0]";
print " und";
print " @test1[0]";
print " COOL!\n";
$x=0;
}
else
{
print "SCHEISSE";
}
}
}
close $filehandle;
close $filehandle1;
User since
2003-08-04
14371
Artikel
ModeratorIn
Stringvergleiche werden mit
eq gemacht...