Open for Mac/Unix/DOS files universally
am 27.07.2006 13:32:13 von unknownPost removed (X-No-Archive: yes)
Post removed (X-No-Archive: yes)
Post removed (X-No-Archive: yes)
Martin Trautmann
> Hallo,
>
> das zeilenweise Oeffnen von Dateien halte ich eigentlich fuer ein
> FAQ-Thema - aber es scheint nicht in den FAQs zu stehen?
>
> Mein Problem: ich will Dateien oeffnen und zeilenweise verarbeiten, die
> aus unterschiedlichen Welten kommen. Zeilenende ist daher wahlweise \n,
> \r oder beides zusammen. Als gemeinsamer Zeichensatz taugt Latin1 bzw.
> ASCII.
>
>
> Von daher brauche ich irgendwas, um dem OPEN zu sagen, dass er als
> Zeilenende entweder CR oder LF oder CRLF akzeptiert.
Tut er das nicht sowieso?
> Ebenso soll er am
> Zeilen-Ende alles entfernen, das nur das Zeilenende darstellt.
chomp This safer version of "chop" removes any trailing string that
corresponds to the current value of $/ (also known as
$INPUT_RECORD_SEPARATOR in the "English" module).
Vielleicht hilft auch das setzen von $/ für OPEN?
Gruß, Frank
--
Arguing that cdbs is good because make is a least common denominator
language in Debian is like arguing that we should do GRs in iambic
pentameter because English is the lingua franca. :) vorlon
Post removed (X-No-Archive: yes)
Martin Trautmann
> Hallo,
>
> das zeilenweise Oeffnen von Dateien halte ich eigentlich fuer ein
> FAQ-Thema - aber es scheint nicht in den FAQs zu stehen?
>
> Mein Problem: ich will Dateien oeffnen und zeilenweise verarbeiten, die
> aus unterschiedlichen Welten kommen. Zeilenende ist daher wahlweise \n,
> \r oder beides zusammen. Als gemeinsamer Zeichensatz taugt Latin1 bzw.
> ASCII.
>
>
> Von daher brauche ich irgendwas, um dem OPEN zu sagen, dass er als
> Zeilenende entweder CR oder LF oder CRLF akzeptiert. Ebenso soll er am
> Zeilen-Ende alles entfernen, das nur das Zeilenende darstellt.
>
> Ich wollte dabei auf groessere 'FileMagic' usw. Pakete verzichten - aber
> entweder ist das Problem so trivial, dass keiner mehr die Loesung
> beschreibt, oder doch so kompliziert, dass es nicht als Einzeiler zu
> loesen ist?
Auch wenn du kein Paket möchtest: vielleicht kannst du dich mit
PerlIO::eol anfreunden? Es ist in XS/C geschrieben, also
wahrscheinlich schnell, und es ist sehr elegant zu benutzen, da als
PerlIO-Layer geschrieben.
Gruß,
Slaven
--
Slaven Rezic - slaven
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net
On Thu, 27 Jul 2006 11:32:13 +0000, Martin Trautmann wrote:
> das zeilenweise Oeffnen von Dateien halte ich eigentlich fuer ein
> FAQ-Thema - aber es scheint nicht in den FAQs zu stehen?
>
> Mein Problem: ich will Dateien oeffnen und zeilenweise verarbeiten, die
> aus unterschiedlichen Welten kommen. Zeilenende ist daher wahlweise \n,
> \r oder beides zusammen. Als gemeinsamer Zeichensatz taugt Latin1 bzw.
> ASCII.
>
>
> Von daher brauche ich irgendwas, um dem OPEN zu sagen, dass er als
> Zeilenende entweder CR oder LF oder CRLF akzeptiert. Ebenso soll er am
> Zeilen-Ende alles entfernen, das nur das Zeilenende darstellt.
>
> Ich wollte dabei auf groessere 'FileMagic' usw. Pakete verzichten - aber
> entweder ist das Problem so trivial, dass keiner mehr die Loesung
> beschreibt, oder doch so kompliziert, dass es nicht als Einzeiler zu
> loesen ist?
[...]
>
> Muss ich tatsaechlich erst mal z.B. die ersten 1000 Bytes ausprobieren,
> ob sich darin nun eher CR, LF oder CRLF findet?
Wenn nicht von vornherein weiÃt, was das Zeilenende ist, fallen mir
auÃer dem nur folgende Möglichkeiten ein:
1) Zeichenweise lesen und CRLF, CR und LF als Zeilenende erkennen und
interpretieren. Würde ich in C so machen, dürfte aber in perl eher
langsam sein.
2) Wenn die Files klein genug sind:
Ganzes File auf einmal lesen und im Memory splitten:
sub readfile {
open (my $fh, $_[0]) or die ...
local $/;
my $f = <$fh>;
return split(/(\r\n|\r|\n)/, $f);
}
(Aber Vorsicht: Mir sind schon MS-DOS-Files begegnet, in denen
einzelne CR und LF enthalten waren, die nicht als Zeilenwechsel zu
interpretieren waren)
hp
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd