Announcement

Collapse
No announcement yet.

Zeilenumbruch in StringListe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zeilenumbruch in StringListe

    Hallo Delphi User,<br>
    beim Aufbereiten von Daten aus einer ASCII-Textdatei habe ich das folgende Problem: nach dem Öffnen der Datei und dem Ablegen des Dateiinhaltes in einer StringListe möchte ich die StringListe nach bestimmten Einträgen durchsuchen. Dies wird mit einer Schleife durchgeführt (for i = 0 to StringList.Count-1 do ...). Da in der Textdatei offensichtlich Leerzeilen/Zeilenumbrüche enthalten sind, bringt Delphi an diesen Stellen eine Exception (Read Error).<br>
    Wie kann ich die StringListe dennoch durchsuchen?<br>
    Für Tips bin ich sehr dankbar.

  • #2
    In welcher Codezeile tritt denn das Problem auf? Denn das sollte eigentlich kein Problem sein. Wenn Du die Stringliste selber aus dem Text füllst, kannst Du doch auch vielleicht beim Füllen bereits weglassen was Du nicht brauchst?

    Comment


    • #3
      Hallo,
      ich denke mal, du solltest deine Suchroutine überprüfen. Leerzeichen und Zeilenumbrüche -also chr(10)+chr(13) sind ja auch ASCII-Zeichen und werden von den Delphiinternen Routinen zur Stringverarbeitung mit Sicherheit nicht anderes behandelt als der Rest(evntl Ausnahme Chr(0)). Wahrscheinlich liegt der fehler in irgendeiner fehlerhaften vergleichsoperation.

      Gruß Fre

      Comment


      • #4
        Hallo Fred,<br>
        anbei kurz den Source Code wie ich es mir vorstelle (es aber nicht funktioniert).<br>
        Die Datei sieht etwa so aus:<br>
        #mat 4.0000E+02 3.3000E-02<br>
        #mat 5.0000E+02 3.4567E-02<br>
        <br>
        #mat 6.0000E+02 4.1234E-03<br>
        Mit einem OpenDialog öffne ich die ASCII-Datei und lege sie in einer StringListe ab (if Execute then DataList.LoadfromFile(Filename)).<br>
        Dann durchsuche ich die StringListe innerhalb einer Schleife:<br>
        for i := 0 to DataList.Count-1 do<br>
        begin<br>
        s1 := DataList[i];<br>
        if s1[1] = '#' then<br>
        begin<br>
        Aufgrund der Leerzeilen/Zeilenumbrüche ergibt sich die Exception - d.h. wenn ich in diese Zeilen irgendein Zeichen eintrage funktioniert das Ganze.<br>
        Wie kann ich es anders machen

        Comment


        • #5
          Du greifst in der Schleife immer auf das erste Zeichen zu. In der Leerzeile ist s1 aber ein Leerstring, also hat auch kein erstes Zeichen, darum kommt es zu einen Fehler. Du könntest das z.B. so abfangen:<p>

          <pre>
          if Length(s1) > 0 then begin
          if s1[1] = '#' then
          blahblah;
          end else
          ShowMessage('Leerzeile');
          </PRE>

          <p>
          Gruß,<br>
          Bernhar

          Comment


          • #6
            Hallo,
            ...oder so...

            for i := 0 to DataList.Count-1 do
            if copy(datalist[i],1,1)='#' then
            begin
            ......
            end;

            ...falls datalist[i] bei copy nicht abgegeben werden soll/kann dann:

            for i := 0 to DataList.Count-1 do
            begin
            s1:=datalist[i];
            if copy(s1,1,1)='#' then
            begin
            ......
            end;
            end;

            Die copy funktion hat offensichtlich keinen Streß mit Null/Leerstrings.

            Gruß, Fred Ziebel

            Comment

            Working...
            X