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
        Administrator

          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
            Anonym

              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
              Administrator

                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
                  Administrator

                    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
                    Administrator

                      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
                        Administrator

                          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
                          Administrator

                            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
                                Administrator

                                  😎

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