Mirwais: Maximale Stringlänge

Hallo Leute,

ich wollte eine Datei, die ca. 200 KB groß ist in einem String einlesen, doch leider merkte ich, daß mein String nur ca. 1/4 der Datei gespeichert hat. Wie kann ich die Stringlänge vergrößern?
Wie kann man das Problem umgehen, außer dass man mehrere Strings nimmt?
Und: Wie groß ist die max. Länge eines Stringes bei Perl?

Danke im voraus!
Gruß Mirwais

  1. Hi,

    die max. Stringlaenge haengt IMHO vom freien RAM des Rechners ab. Allerdings sollte eine 200kB-Datei problemlos einzulesen sein. Poste doch mal ein Haeppchen Code, damit man sich ein Bild machen kann, wie Du die Datei einliest!

    Viele Gruesse
    speedy

    1. Ja Cheahta,

      ich lese die datei in einem Skalar ein!
      Was ist mit $/ gemeint?

      Gruß Mirwais

      1. Hallo Mirwais

        Ja Cheahta,

        ich lese die datei in einem Skalar ein!
        Was ist mit $/ gemeint?

        $/ = Input Record Seperator.

        Liest Du eine Datei in einen Skalar ein, wird diese bis zu dem Zeichen eingelesen, das in dieser Variablen steht. Voreingestellt ist '\n'.

        Mit undef $/ wird die gesamte Datei in den Skalar eingelesen, also:

        undef $/;
        my $inhalt = <DATEI>

        besser ist IMHO aber:

        my $inhalt = do {local $/; <DATEI> }

        da der alte Wert von $/ beim Verlassen des Blockes wieder hergestellt wird

        s. perldoc perlvar

        Gruß Mirwais

        Gruss
           Kai

        1. Hi,

          ich lese eine Datei immer in ein Array ein. Sofern noetig, verarbeite ich sie weiter zu einem Skalar. Also:

          open (DATEI, "datei.txt");
          @datei=<DATEI>;
          close DATEI;

          foreach $zeile (@datei)
          {
          chomp $zeile;
          $skalar .= $zeile; #oder sowas (brauche ich aber selten)
          }

          Viele Gruesse
            speedy

          1. ich lese eine Datei immer in ein Array ein. Sofern noetig, verarbeite ich sie weiter zu einem Skalar. Also:

            Wozu soll das gut sein?

            open (DATEI, "datei.txt");

            Man sollte *immer* auf Fehler pruefen:
            open DATEI, 'datei.txt' or die "datei.txt: $!";

            foreach $zeile (@datei)
            {

            »»  chomp $zeile;
            »»  $skalar .= $zeile; #oder sowas (brauche ich aber selten)

            }

            Wieso entfernst Du die newlines am Ende der Zeilen? Damit veraenderst Du den Inhalt, ich bin mir nicht sicher, ob man das wirklich immer will.

            Die anderen Vorschlaege scheinen mir wesentlich besser zu sein.

            Peter

            1. Hi,

              Man sollte *immer* auf Fehler pruefen:
              open DATEI, 'datei.txt' or die "datei.txt: $!";

              ich weis schon, aber ich hatte nicht die Zeit, ein komplettes tolles Perlscript hinzuzaubern :)

              Wieso entfernst Du die newlines am Ende der Zeilen? Damit veraenderst Du den Inhalt, ich bin mir nicht sicher, ob man das wirklich immer will.

              Natuerlich will man das nicht immer und der Programmierer, der den Code pastet wird Ihn schon so anpassen wie er‚s braucht - dachte ich...

              Die anderen Vorschlaege scheinen mir wesentlich besser zu sein.

              <g> nobody is perfect!

              Viele Gruesse
                speedy

  2. Hallo,

    Und: Wie groß ist die max. Länge eines Stringes bei Perl?

    Der zur Verfügung stehende RAM.

    Dei Problem rührt vielleicht daher, daß es sich um eine Binärdatei handelt.
    Unter Win32 gibts da Unterschiede, leider.
    versuchs mal mit
       open(FILEHANDLE, "$filename") or die "nixda mit aufmachen von $dateiname";
       binmode(FILEHANDLE);

    ist nur so eine Idee.

    Grüße
       Klaus

  3. Hi,

    ich wollte eine Datei, die ca. 200 KB groß ist in einem String einlesen, doch leider merkte ich, daß mein String nur ca. 1/4 der Datei gespeichert hat. Wie kann ich die Stringlänge vergrößern?

    was steht denn in $/? Ich nehme an, Du liest in einen Skalar ein. Probier mal

    undef $/;

    Cheatah