Startseite › Foren › Deutsches LiveCode-Forum › In Textdatei suchen
Schlagwörter: Text Variable
- Dieses Thema hat 28 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 4 Jahren, 7 Monaten von Klaus Major.
-
AutorBeiträge
-
-
April 24, 2020 um 16:41 Uhr #20310
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
-
April 24, 2020 um 17:49 Uhr #20312
Du könntest zunächst einmal -> lineoffset bemühen und dann in der gefundenen Zeile weitersuchen mit -> offset o.ä.
-
April 25, 2020 um 07:53 Uhr #20319
Danke. Der Befehl Lineoffset steht nicht in meiner Lektüre. Werde mal googeln.
-
April 25, 2020 um 09:28 Uhr #20320
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 -
April 25, 2020 um 10:39 Uhr #20327
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 🙂
-
April 25, 2020 um 10:44 Uhr #20329
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 🙂
-
April 25, 2020 um 11:06 Uhr #20334
Der Befehl Lineoffset steht nicht in meiner Lektüre. Werde mal googeln.
???
Warum in die Ferne schweifen, wo das Gute (Dictionary!) liegt so nah? 🙂
-
April 25, 2020 um 14:34 Uhr #20341
In Haukes Buch (zumindest in der 1.Version) hat er den Befehl nicht verwendet 🙂
Das meint Radmühl wahrscheinlich mit Lektüre.
-
-
April 25, 2020 um 15:41 Uhr #20343
Das ist mir schon klar, Haukes Buch deckt nun mal nicht alles ab, das Dictionary schon, da braucht man nicht zu Goorgeln!
-
April 25, 2020 um 17:06 Uhr #20349
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 🙂
-
-
April 25, 2020 um 15:42 Uhr #20345
Hinweis:
... ## repeat until forever ## geht auch mal wieder kürzer, einfach: repeat ...
🙂
-
April 25, 2020 um 16:58 Uhr #20347
Ah! wieder was dazu gelernt 🙂
-
-
April 25, 2020 um 22:43 Uhr #20355
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… 😎-
April 26, 2020 um 17:31 Uhr #20374
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 🙂
-
April 26, 2020 um 18:09 Uhr #20380
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. 🙂
-
-
April 26, 2020 um 10:09 Uhr #20364
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-
April 26, 2020 um 17:40 Uhr #20376
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 -
April 27, 2020 um 12:39 Uhr #20398
Ups, muss natürlich heissen:
Word 1 of item 2 of tWert
-
-
April 26, 2020 um 14:30 Uhr #20368
Vielleicht schreibt ihr auch noch einmal eine Mail an Hauke, Adresse steht im IMPRESSUM!
-
April 27, 2020 um 12:04 Uhr #20391
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
-
April 30, 2020 um 16:07 Uhr #20461
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
-
April 30, 2020 um 17:00 Uhr #20464
Brauchst Du beide Werte oder nur den letzten?
-
-
April 30, 2020 um 16:50 Uhr #20462
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
-
April 30, 2020 um 17:08 Uhr #20468
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-
April 30, 2020 um 17:14 Uhr #20469
Genau, wenn Du genau den zweiten Wert willst, wird es so gehen 🙂
-
-
April 30, 2020 um 17:28 Uhr #20471
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!
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.