In Textdatei suchen

Startseite Foren Deutsches LiveCode-Forum In Textdatei suchen

Schlagwörter: 

Ansicht von 16 Antwort-Themen
  • Autor
    Beiträge
    • #20310
      Radmuehl
      Teilnehmer

      Liebe Forumsmitglieder,

      ich habe eine Textdatei mit technischen Parametern die ich auswerten möchte. Da steht z.B. irgendwo Cld 8807

      Ich möchte nun diese Datei auswerten und übersichtlich in der App ausgeben. Das Einlesen der Textdatei ist kein Problem. Ich muss aber dann in der Datei gewisse Werte suchen und in eine Variable schreiben.

      Um bei dem Beispiel zu bleiben. In der Variablen gCld soll dann der Wert 8807 stehen. Wie suche ich den bestimmten Textabschnitt?

      Viele Grüße

      Radmühl

    • #20312
      Klaus Major
      Verwalter

      Du könntest zunächst einmal -> lineoffset bemühen und dann in der gefundenen Zeile weitersuchen mit -> offset o.ä.

    • #20319
      Radmuehl
      Teilnehmer

      Danke. Der Befehl Lineoffset steht nicht in meiner Lektüre. Werde mal googeln.

    • #20320
      Torsten
      Teilnehmer

      Hi Radmühl,

      ich habe noch nicht genau veerstanden, was Du machen willst. Kannst Du ein bisschen Textdatei zeigen und sagen, was Du genau machen willst? Dann fällt es mir zumindest leicht, mir vorzustellen, wie es gehen könnte.

      Liebe Grüße
      Torsten

    • #20327
      Torsten
      Teilnehmer

      Hi,

      ich habe aus Spass und Eigeninteresse eben eine Funktion geschrieben, die alle Zeilennummern eines Textes ausgibt, in denen eine gesuchte Zeichenkette vorkommt. Das fehlt meines Erachtens noch im Livecode-Fundus 🙂

      function allLineOffsets pTextToFind, pText
         
         put 0 into tLinesToSkip
         
         repeat until forever
            
            put lineoffset(pTextToFind,pText, tLinesToSkip) into tHit
            
            if tHit is not 0 then
               put tHit + tLinesToSkip & comma after tFoundLines
               put tHit + tLinesToSkip into tLinesToSkip
            else
               exit repeat
            end if
            
         end repeat
         
         if the last char of tFoundLines is comma then delete last char of tFoundLines
         return tFoundLines -- entweder empty oder die Zeilennummern: 1,4,5 etc.
         
      end allLineOffsets
      

      Viel Spass damit 🙂

    • #20329
      Torsten
      Teilnehmer

      Hi,

      ich habe aus Spass und Eigeninteresse eben eine Funktion geschrieben, die alle Zeilennummern eines Textes ausgibt, in denen eine gesuchte Zeichenkette vorkommt. Das fehlt meines Erachtens noch im Livecode-Fundus 🙂

      function allLineOffsets pTextToFind, pText
         
         put 0 into tLinesToSkip
         
         repeat until forever
            
            put lineoffset(pTextToFind,pText, tLinesToSkip) into tHit
            
            if tHit is not 0 then
               put tHit + tLinesToSkip & comma after tFoundLines
               put tHit + tLinesToSkip into tLinesToSkip
            else
               exit repeat
            end if
            
         end repeat
         
         if the last char of tFoundLines is comma then delete last char of tFoundLines
         return tFoundLines -- entweder empty oder die Zeilennummern: 1,4,5 etc.
         
      end allLineOffsets
      

      In gleicher Weise könnte man die anderen Offset-Funktionen auch einsetzen.

      Viel Spass damit 🙂

    • #20334
      Klaus Major
      Verwalter

      Der Befehl Lineoffset steht nicht in meiner Lektüre. Werde mal googeln.

      ???

      Warum in die Ferne schweifen, wo das Gute (Dictionary!) liegt so nah? 🙂

      • #20341
        Torsten
        Teilnehmer

        In Haukes Buch (zumindest in der 1.Version) hat er den Befehl nicht verwendet 🙂
        Das meint Radmühl wahrscheinlich mit Lektüre.

    • #20343
      Klaus Major
      Verwalter

      Das ist mir schon klar, Haukes Buch deckt nun mal nicht alles ab, das Dictionary schon, da braucht man nicht zu Goorgeln!

      • #20349
        Torsten
        Teilnehmer

        Stimmt, aber bei dem Menge an Commands und Functions muss man schon Glück haben, die richtige Funktion zu finden…

        Man ahnt ja gar nicht, was alles in Livecode geht 🙂

    • #20345
      Klaus Major
      Verwalter

      Hinweis:

      ...
      ## repeat until forever
      ## geht auch mal wieder kürzer, einfach:
      repeat
      ...

      🙂

      • #20347
        Torsten
        Teilnehmer

        Ah! wieder was dazu gelernt 🙂

    • #20355
      Klaus Major
      Verwalter

      Stimmt, aber bei dem Menge an Commands und Functions muss man schon Glück haben, die richtige Funktion zu finden…

      Es geht hier um LINEOFFSET, wonach sonst soll er da großartig suchen müssen?
      Torsten, Torsten, Torsten… 😎

      • #20374
        Torsten
        Teilnehmer

        Naja, wenn man Anfänger ist und der Befehl nicht im Einsteiger-Buch erwähnt ist, woher soll man dann eine Ahnung davon haben, dass es sowas wie lineoffset überhaupt gibt und wie er dann heissen könnte?

        Es sind nicht alle wie Du alte Metacard-Hasen, die sich mit der Byte-Pike durchgehackt haben 🙂

      • #20380
        Klaus Major
        Verwalter

        Nee, nee, nee! In seinem zweiten Posting bekundet Radmühl sein neu erworbenes Wissen um „lineoffset“!

        Ab da war es klar, um welche Funktion es hier geht. 🙂

    • #20364
      Radmuehl
      Teilnehmer

      Erst mal Sorry, dass ich jetzt erst wieder Antworte. Hatte leider vorher keine Zeit.

      Ich habe eine ausführliche Antwort geschrieben, aber das Forum verweigert den Eintrag. Deshalb hier ein Link zu der Datei mit der Antwort.
      Link

      • #20376
        Torsten
        Teilnehmer

        Hi Radmühl,

        ich habe in Deinem Beispiel den Text „“Individual Cell Statistics“ nicht gefunden, aber die struktur sieht doch so aus, wie eine klassische Key-Value-Struktur: am Anfang einer Zeile steht der Key, dann kommt ein Doppelpunkt und dann der Wert:

        CV mean : 3827 mV, dV = 20 mV
        CV min  : 3810 mV
        CV max  : 3830 mV
        OCVtimer: 4338 s

        In diesem Fall könntest Du es einfach so machen:

        put line lineoffset("CV min", Daten) into tWert
        set itemdelimiter to ": " -- das Leerzeichen ist wichtig
        put word 2 of item 2 of tWert into tCVMin -- 1. Wort ist die Zahl vor der Masseinheit, so brauchst Du díe Zeichen nicht immer zählen (char 24 to 27 etc,)

        Probiers mal so.

        LG
        Torsten

      • #20398
        Torsten
        Teilnehmer

        Ups, muss natürlich heissen:

        Word 1 of item 2 of tWert

    • #20368
      Klaus Major
      Verwalter

      Vielleicht schreibt ihr auch noch einmal eine Mail an Hauke, Adresse steht im IMPRESSUM!

      • #20378
        Torsten
        Teilnehmer

        Habs gerade gemacht 🙂

      • #20382
        Klaus Major
        Verwalter

        Super, hoffentlich kann Hauke hier was fixen.

    • #20391
      Radmuehl
      Teilnehmer

      Danke an Alle. Ihr habt mir sehr geholfen. Ich habe noch eine andere Frage und mache dafür einen neuen Beitrag auf.

      Viele Grüße

      Radmühl

    • #20461
      Radmuehl
      Teilnehmer

      Das mit Lineoffset funktioniert ja prima. Jetzt habe ich beim Testen doch noch ein Problem gefunden. Mit folgendem Befehl suche ich ja die Zeile mit dem Beginn „CAP min“.

      put lineOffset("CAP min",Daten) into Zeile

      Er findet natürlich die Zeilennummer und schreibt sie in die Variable „Zeile“

      In meinem Text gibt es aber weiter unten noch eine Zeile die genauso beginnt und nur einen anderen Wert enthält. Wie schaffe ich es, dass er bei der Suche die untere Zeile findet. Ich bräuchte so eine Art „weiter“.

      Viele Grüße

      Radmühl

      • #20464
        Torsten
        Teilnehmer

        Brauchst Du beide Werte oder nur den letzten?

    • #20462
      Klaus Major
      Verwalter

      Hi Radmuehl,

      es gibt einen dritten Parameter zu LINEOFFSET -> lines to skip
      Der gibt an, ab welcher Zeile LC weitersuchen soll, das geht aber nur in einem repeat loop.

      ...
      put 0 into skippy
      repeat
        put lineOffset("CAP min",Daten,skippy) into Zeile
      
       ## Nichts gefunden, also raus hier:
        if Zeile = 0 then
          exit repeat
        end if
        
        ## Im nächsten Loop WEITER suchen und die schon abgegrasten Zeilen überspringen:
        add Zeile to skippy
      end repeat
      ...

      Mit diesem Skript ermittelst Du das LETZTE (oder einzige) Vorkommen Deines gesuchten Textes!

      Gruß

      Klaus

    • #20468
      Radmuehl
      Teilnehmer

      Danke. Das mit dem weiteren Parameter klingt super. Wenn ich auf den 2. Wert will, müsste das auch ohne Schleife gehen. Denke mir das so:

      put lineOffset("CAP min",Daten) into Zeile -- jetzt habe ich die erste Zeile.
      Put Zeile into skippy
      put lineOffset("CAP min",Daten,skippy) into Zeile -- suchen ab der gefundenen Zeile

      Jetzt müsste ich theoretisch in der 2. Zeile mit dem Wert sein.

      Gruß
      Radmühl

      • #20469
        Torsten
        Teilnehmer

        Genau, wenn Du genau den zweiten Wert willst, wird es so gehen 🙂

    • #20471
      Klaus Major
      Verwalter

      Wie ich schon schrieb:

      Mit diesem Skript ermittelst Du das LETZTE (oder einzige) Vorkommen Deines gesuchten Textes!

      Egal wie oft (mehr als zwei Mal) Dein Text in -> Daten vorkommt!

      Und ja, Dein Skript zeigt Dir die Zeile mit dem zweiten Vorkommen Deines Strings.
      Vorausgesetzt, es gibt ihn auch zwei mal!

Ansicht von 16 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.