Startseite › Foren › Deutsches LiveCode-Forum › Bestimmte Zeilen aus einer Textdatei auslesen
- Dieses Thema hat 13 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren, 2 Monaten von Klaus Major.
-
AutorBeiträge
-
-
September 2, 2018 um 19:39 Uhr #7368
Hallo,
Wie man Textdateien in eine Datei schreibt und sie wieder einliest ist mir klar.
Besteht die Möglichkeit, eine bestimmte Zeile (line) aus einer bestimmten Textdatei auszulesen?Gruß
Walter -
September 2, 2018 um 19:50 Uhr #7370
Hi Walter,
ja, das geht. 🙂
Um zu sagen, wie Du es machen sollst, benötige ich aber mehr Info und/oder vielleicht ein Beispiel. Mit Sicherheit wird aber “lineoffset” dabei eine zentrale Rolle spielen und Du solltest den Inhalt der Datei zuerst in eine Variable packen.Gruß
Klaus
-
September 3, 2018 um 07:31 Uhr #7382
Hallo Klaus,
Ich möchte bestimmte Einstellungswerte der App speichern (Inhalte von Feldern, Stati von Checkboxen, Comboboxen etc.), die dann zeilenweise in der Textdatei abgespeichert werden, damit der User bei erneutem Start der App wieder die Werte in den Feldern hat, bevor er sie geschlossen hat. Der Code soll dann die Werte aus der Textdatei Zeile für Zeile auslesen und die entsprechenden Werte in der App setzen, so dass der User die App vorfindet, so wie er sie verlassen hat. Für jeden Wert eine eigene Textdatei anlegen, erschien mit doch zu umständlich. Vielleicht gibt es da auch was anderes.
Ich hoffe, du weisst, was ich meine 🙂Vielen Dank
Walter -
September 3, 2018 um 10:15 Uhr #7390Anonym
Hallo Walter,
das ist problemos umzusetzen.
Du schreibst ja bereits den Inhalt der Felder zeilenweise in deine Textdatei. Beim öffnen der App musst du dann nur noch die entsprechende Zeile wieder in das Textfeld einfügen. Wie immer gibt es bei Livecode mehrere Lösungen 😉
on opencard put line 1 of URL "file:mvariables.txt" into myvariable1 put myvaribale1 into field "myfield1" end opencard
kannst natürlich auch direkt von der Textdatei in das Feld schreiben ohne den “Umweg” über die variable:
on opencard put line 1 of URL "file:mvariables.txt" into field "myfield1" end opencard
oder du lädst die Textdatei insgesamt erst in eine veriable und liest dann die Zeile aus der Variable heraus:
on opencard put URL "file:mvariables.txt" into myvariable put line 1 of myvariable into field "myfield1" end opencard
Welchen weg du gehst hängt davon ab ob du die variablen später noch benötigst und wenn ja für welchen zweck.
Viele Grüße
Kosta
-
September 3, 2018 um 10:48 Uhr #7393
Hallo Walter,
was Kosta schrieb! 🙂
Eine andere Möglichkeit wäre, um bei Bedarf bestimmte Zeilen herauszulesen, eine “Lookup” Tabelle anzulegen im Format -> Name des LC Objektes TAB Wert. TAB ist natürlich ein Tabulator!
Beispiel:
…
chb_1 TAB TRUE
fld_name TAB Willi Wonka
etc.
…
So kannst Du z.B. gezielt den Wert für Checkbox “chb_1” herauslesen:
…
put lineoffset(“chb_1”,the_variable_mit_der_gesamten_ini_datei) into tLine
set itemdel to TAB
set the hilite of btn “chb_1” to item 2 of line tLine of the_variable_mit_der_gesamten_ini_datei
…
Nur mal so als Anregung.Gruß
Klaus
-
September 3, 2018 um 13:05 Uhr #7406
Hallo,
Vielen Dank für die Tipps!
Das Schreiben in die Datei hat super geklappt, nur beim Auslesen hab ich noch einen Hund drinnen.
Es soll ein gewählter Wert (in dem Fall ein Name) eines Optionsmenüs wieder eingelesen werden.
Statt dem Namen steht dann aber nur der Variablenname dort.on preOpenCard open file specialFolderPath("desktop") & "/app_status.txt" for read read from file specialFolderPath("desktop") & "/app_status.txt" until EOF put line 2 of URL "file:app_status.txt" into mitarbeiter set the label of btn "mitarbeiter" to mitarbeiter close file specialFolderPath("desktop") & "/app_status.txt" end preOpenCard
Danke
Walter -
September 3, 2018 um 13:22 Uhr #7408
Hallo Walter,
ganz wichtig KLAMMERN um zusammengesetzte Objektnamen und auch Dateinamen, sonst kommt die Engine durcheinander, da zuerst alles in Klammern ge”parse”t wird.
Im eingenen Interesse gewöhn Dich an die kurze URL Syntax , das ist dann ein EINZEILER! 🙂
on preOpenCard ## Tipparbeit sparen! 8-) put specialFolderPath("desktop") & "/app_status.txt" into tFile put URL("file:" & tFile) into tData set the label of btn "mitarbeiter" to line 2 of tData ## Oder noch kürzer: ## set the label of btn "mitarbeiter" to line 2 of URL("file:" & specialFolderPath("desktop") & "/app_status.txt") ## So wären die Klammern korrekt: ## read from file (specialFolderPath("desktop") & "/app_status.txt") until EOF ##set the label of btn "mitarbeiter" to mitarbeiter ## ... ## close file (specialFolderPath("desktop") & "/app_status.txt") end preOpenCard
Gruß
Klaus
-
September 3, 2018 um 13:25 Uhr #7410
Analyse Deines Skrtipts:
on preOpenCard ## ganz wichtig KLAMMERN um zusammengesetzte Namen, seien es Objekte in LC oder Dateipfade open file (specialFolderPath("desktop") & "/app_status.txt") for read read from file (specialFolderPath("desktop") & "/app_status.txt") until EOF ## der Inhalt der Datei ist nun in der Variablen IT put line 2 of IT into mitarbeiter ## Das würde auch klappen, aber es fehlt der abolute Pfad ## -> specialfolderpath("desktop") & ... ## put line 2 of URL "file:app_status.txt" into mitarbeiter set the label of btn "mitarbeiter" to mitarbeiter close file (specialFolderPath("desktop") & "/app_status.txt") end preOpenCard
-
September 3, 2018 um 13:46 Uhr #7412
Hallo Klaus,
Super, jetzt hat es geklappt. Ihr seid spitze!
Noch eine Zusatzfrage: bestünde auch die Möglichkeit einen Text in variabler Länge (der am Ende der Textdatei steht) auszulesen?
Also so was wie: lese ab Zeile xy bis zum EOFVielen Dank!
Walter -
September 3, 2018 um 13:55 Uhr #7417
Hi Walter,
Ihr seid spitze!
alter Hut, erzähl uns was Neues! 😀
Klar geht das, wir können sogar NEGATIVE Nummer als Zeile angeben:
…
line -1 of tData ## Letzte Zeile der Daten
line -2 of tData ## Vorletzte Zeile
line -3 to -1 of tData ## die letzten drei Zeilen von tData.
line 2 to -1 of tData ## Alles ausser der ersten Zeile
## etc…
Capisce?Gruß
Klaus
-
September 3, 2018 um 13:57 Uhr #7419
Und nicht vergessen, die URL Syntax geht natürlich auch beim Schreiben von Daten!
…
put der_ganze_kladderadatsch into url(“file:” & specialfolderpath(“desktop”) & “/meine tolle datei.txt”)
… -
September 3, 2018 um 14:36 Uhr #7421
Ja, klappt bestens!
Allerdings hab ich jetzt einen Nebeneffekt, den ich vorher nicht hatte (vor dem Wiedereinlesen).
Verstelle ich auf card1 diverse Popups etc, gehe dann auf card2 und wieder zurück auf card1, so springen die Felder wieder auf die ursprünglichen Werte zurück, obwohl ich nur sage “go to next card” und “go to recent card”.
What’s wrong?
-
September 3, 2018 um 14:38 Uhr #7423
eh klar, ich hab ja das Einlesen in preOpenCard gestellt. Logisch, das es dann zurückspringt!
Danke Walter
-
September 3, 2018 um 15:02 Uhr #7425
😎
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.