![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: bovo, 31. 07. 2003, 11:40
Hallo liebe Leute,
Hier ist mein Problem :
Ich habe eine Text Datei, deren Inhalt ist z.B.: "a,2,b,3,aaa,4,*N,20" . Aber ohne Anführingsstriche und alles nur in einer Zeile!
Diese öffne ich und will nur die Inhalte zwischen den Komma's abspeichern, also egal wieviel Zeichen zwischen den Kommas sind.
Ich habe es schon mit :
open(DATEI, "<text.txt") || die " File not found.";
@tests = <DATEI>;
while(! eof(DATEI)){
@tests =~ /(.*),(.*)/;
$var1 = $1;
$var2 = $2;
printf "$1 und $2 \n";
}
close(DATEI);
versucht. Aber er gibt mir jedes in der Anzahl Zeichen Fälle aus, also im oberen Beispiel sinds 19 Zeichen...also 19 Fälle aber es sollten nur 8 Fälle sein.
Diese Fälle sind ohne Inhalt.
Ich hoffe Ihr könnt mir helfen.
Gruss
Bovo
Die folgende Nachricht zum Thema stammt von: Philipp Hasenfratz, 31. 07. 2003, 11:48
Halihallo bovo
»» open(DATEI, "<text.txt") || die " File not found.";
»» @tests = <DATEI>;
»» while(! eof(DATEI)){
Stopp. Du liest die gesamte Datei in ein Array ein und machst eine While bis das
Dateiende erreicht wird, welches eigentlich bereits eingetreten ist und du gar nicht
mehr in der Datei nach vorne liest (sprich eof ist immer true)?
»» @tests =~ /(.*),(.*)/;
Ein split ist hier wesentlich performanter und sicherer:
foreach (@tests) {
my @parts = split(/,/,$_); # du hast sowohl Dateidaten, als auch Parts im selben
# array gespeichert, das _kann nicht gut kommen_.
# do something with @parts
}
perldoc -f split
»» printf "$1 und $2 \n";
printf sollte ohne Formatierung und Platzhalter vermieden werden, verwende hier einfach
print. printf ist unsicher und aperformant.
aus perldoc -f printf:
<cite>
Don't fall into the trap of using a "printf" when a simple
"print" would do. The "print" is more efficient and less error
prone.
</cite>
Viele Grüsse
Philipp
--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den /faq/ und dem /archiv/.
Die folgende Nachricht zum Thema stammt von: bovo, 31. 07. 2003, 12:46
Hallo Philipp...erstmal Danke für Deine Hilfe
aber wie kann ich die einzelnen gesplittenen Bereiche rausfiltern
und ausgeben und zwar in $var1 sowie $var2 ??
Danke Dir.
Die folgende Nachricht zum Thema stammt von: Philipp Hasenfratz, 31. 07. 2003, 12:57
Halihallo bovo
»» aber wie kann ich die einzelnen gesplittenen Bereiche rausfiltern
»» und ausgeben und zwar in $var1 sowie $var2 ??
perldoc perlfaq4 // Sektion Array
perldoc perldata
=> über Indizies, @array : erstes Element ist Index 0 => $array[0]
Viele Grüsse
Philipp
--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den /faq/ und dem /archiv/.
Die folgende Nachricht zum Thema stammt von: roman lenz, 31. 07. 2003, 13:00
hi hi
mit
foreach (@parts){
$_ # $_ enthält den aktullen string
...
...
}
kommst du an jeden string
bis bis roman
Die folgende Nachricht zum Thema stammt von: Siechfred, 31. 07. 2003, 11:55
Hi bovo,
»» open(DATEI, "<text.txt") || die " File not found.";
»» @tests = <DATEI>;
Besser wäre an dieser Stelle das zeilenweise Einlesen mit while.
»» while(! eof(DATEI)){
Das hier ist imho überflüssig.
»» @tests =~ /(.*),(.*)/;
Hier wäre die Verwendung der split-Funktion angebrachter:
@test = split (/,/, $zeile);
Viele Grüße
Torsten
--
Feed your ears: http://www.siechfreds-welt.de/alchemist.html
© 1998-2006
Impressum, Software: Classic Forum