Open for Mac/Unix/DOS files universally

Open for Mac/Unix/DOS files universally

am 27.07.2006 13:32:13 von unknown

Post removed (X-No-Archive: yes)

Re: Open for Mac/Unix/DOS files universally

am 27.07.2006 13:41:49 von unknown

Post removed (X-No-Archive: yes)

Re: Open for Mac/Unix/DOS files universally

am 27.07.2006 15:23:59 von frank

Martin Trautmann 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

Re: Open for Mac/Unix/DOS files universally

am 27.07.2006 16:28:29 von unknown

Post removed (X-No-Archive: yes)

Re: Open for Mac/Unix/DOS files universally

am 27.07.2006 21:48:49 von Slaven Rezic

Martin Trautmann 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 rezic 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

Re: Open for Mac/Unix/DOS files universally

am 06.08.2006 19:45:33 von hjp-usenet2

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