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
        Administrator

          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
                  Administrator

                    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
                      Administrator

                        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
                          Administrator

                            Hinweis:

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

                            🙂

                            • #20347
                              Torsten
                              Teilnehmer

                                Ah! wieder was dazu gelernt 🙂

                            • #20355
                              Klaus Major
                              Administrator

                                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
                                    Administrator

                                      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
                                          Administrator

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

                                            • #20378
                                              Torsten
                                              Teilnehmer

                                                Habs gerade gemacht 🙂

                                              • #20382
                                                Klaus Major
                                                Administrator

                                                  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
                                                      Administrator

                                                        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
                                                            Administrator

                                                              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.