Open for Mac/Unix/DOS files universally

Post removed (X-No-Archive: yes)
Notifier Deamon [ Do, 27 Juli 2006 13:32 ] [ ID #1407897 ]

Re: Open for Mac/Unix/DOS files universally

Post removed (X-No-Archive: yes)
Notifier Deamon [ Do, 27 Juli 2006 13:41 ] [ ID #1407898 ]

Re: Open for Mac/Unix/DOS files universally

Martin Trautmann <t-use [at] gmx.net> wrote:

> 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
frank [ Do, 27 Juli 2006 15:23 ] [ ID #1407899 ]

Re: Open for Mac/Unix/DOS files universally

Post removed (X-No-Archive: yes)
Notifier Deamon [ Do, 27 Juli 2006 16:28 ] [ ID #1407900 ]

Re: Open for Mac/Unix/DOS files universally

Martin Trautmann <t-use [at] gmx.net> writes:

> 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 <at> rezic <dot> de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net
Slaven Rezic [ Do, 27 Juli 2006 21:48 ] [ ID #1407904 ]

Re: Open for Mac/Unix/DOS files universally

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 [at] hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
hjp-usenet2 [ So, 06 August 2006 19:45 ] [ ID #1419861 ]
Perl » de.comp.lang.perl.misc » Open for Mac/Unix/DOS files universally

Vorheriges Thema: Logitech G15 SDK
Nächstes Thema: Mehrzeilige Variable in Einzelzeilen Zerlegen