Bestimmte Zeilen aus einer Textdatei auslesen

Startseite Foren Deutsches LiveCode-Forum Bestimmte Zeilen aus einer Textdatei auslesen

Ansicht von 13 Antwort-Themen
  • Autor
    Beiträge
    • #7368
      wfr
      Teilnehmer

      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

    • #7370
      Klaus Major
      Verwalter

      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

    • #7382
      wfr
      Teilnehmer

      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

    • #7390
      appTaurus
      Teilnehmer

      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

    • #7393
      Klaus Major
      Verwalter

      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

    • #7406
      wfr
      Teilnehmer

      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

    • #7408
      Klaus Major
      Verwalter

      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

    • #7410
      Klaus Major
      Verwalter

      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
    • #7412
      wfr
      Teilnehmer

      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 EOF

      Vielen Dank!
      Walter

    • #7417
      Klaus Major
      Verwalter

      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

    • #7419
      Klaus Major
      Verwalter

      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")
      ...

    • #7421
      wfr
      Teilnehmer

      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?

    • #7423
      wfr
      Teilnehmer

      eh klar, ich hab ja das Einlesen in preOpenCard gestellt. Logisch, das es dann zurückspringt!

      Danke Walter

    • #7425
      Klaus Major
      Verwalter

      😎

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