sscanf() hat mit meiner Idee Probleme - oder umgekehrt: String mit fester Spaltenbreite zerlegen

sscanf() hat mit meiner Idee Probleme - oder umgekehrt: String mit fester Spaltenbreite zerlegen

am 22.11.2006 01:09:28 von Kai Koenig

Hallo zusammen,

ich versuche einen String, der zzt. aus der Zeile einer Textdatei besteht,
zu zerlegen.
Der String sieht z.B. so aus:
A1132 N03 11/11/05 09:10 00:00:00 6 ** TI
123456...................

Und ich mache ungefähr sowas:
sscanf($scanstring, "%5c %3c %3c %8c")

Das Problem ist, das anstatt der fünf Leerzeichen, die zwischen A1132 und
N03 stehen, auch noch drei wichtige Zeichen stehen können.
Wenn ich sscanf mit %s verwende, ändert sich auch die Anzahl der Elemente im
Array, je nachdem, wieviele Felder ausgegeben wurden.
(Das %3c scheint nicht auf Leerzeichen zu matchen, obwohl es in man sscanf()
so angegeben ist)

Ich möchte aber, dass die Anzahl der Elemente immer gleich bleibt und das
zur Spalte gehörende Element halt leerbleibt, wenn es in dieser Spalte nur
Leerzeichen gibt. Wie kann ich das erreichen?

Ich stehe gerade etwas auf dem Schlauch.

Vielen Dank!

Kai

Re: sscanf() hat mit meiner Idee Probleme - oder umgekehrt: Stringmit fester Spaltenbreite zerlegen

am 22.11.2006 02:10:40 von Niels Braczek

Kai Koenig schrieb:

> Ich möchte aber, dass die Anzahl der Elemente immer gleich bleibt und=
das=20
> zur Spalte gehörende Element halt leerbleibt, wenn es in dieser Spalt=
e nur=20
> Leerzeichen gibt. Wie kann ich das erreichen?

Nimm substr().

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: sscanf() hat mit meiner Idee Probleme - oder umgekehrt: Stringmit fester Spaltenbreite zerlegen

am 22.11.2006 08:10:39 von Claus Reibenstein

Kai Koenig schrieb:

> Und ich mache ungefähr sowas:
> sscanf($scanstring, "%5c %3c %3c %8c")
>
> (Das %3c scheint nicht auf Leerzeichen zu matchen, obwohl es in man sscanf()
> so angegeben ist)

Doch, matcht es.

Dein Problem liegt in dem Leerzeichen vor %3c. Dieses matcht auf
beliebigen "white space", also auf eine Folge von beliebig vielen
Leerzeichen, Tabulatoren, Linefeeds etc. Dein %3c greift daher erst nach
dem "white space", also bei N03.

Wenn Deine Zeilen ein festes Format haben - das geht aus Deinem Posting
nicht eindeutig hervor -, dürfte eine Zerlegung mit substr() sinnvoller
sein.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

oT Vielen Dank an Niels und Claus, es funktioniert wunderbar jetzt!

am 25.11.2006 01:04:26 von Kai Koenig

"Kai Koenig" schrieb im Newsbeitrag
news:4shiq3FvqnogU2@mid.uni-berlin.de...
> Hallo zusammen,
>
> ich versuche einen String, der zzt. aus der Zeile einer Textdatei besteht,
> zu zerlegen.
> Der String sieht z.B. so aus:
> A1132 N03 11/11/05 09:10 00:00:00 6 ** TI 123456...................
>
> Und ich mache ungefähr sowas:
> sscanf($scanstring, "%5c %3c %3c %8c")
>
> Das Problem ist, das anstatt der fünf Leerzeichen, die zwischen A1132 und
> N03 stehen, auch noch drei wichtige Zeichen stehen können.
> Wenn ich sscanf mit %s verwende, ändert sich auch die Anzahl der Elemente
> im Array, je nachdem, wieviele Felder ausgegeben wurden.
> (Das %3c scheint nicht auf Leerzeichen zu matchen, obwohl es in man
> sscanf() so angegeben ist)
>
> Ich möchte aber, dass die Anzahl der Elemente immer gleich bleibt und das
> zur Spalte gehörende Element halt leerbleibt, wenn es in dieser Spalte nur
> Leerzeichen gibt. Wie kann ich das erreichen?
>
> Ich stehe gerade etwas auf dem Schlauch.
>
> Vielen Dank!
>
> Kai
>