Speichern

Ansicht von 27 Antwort-Themen
  • Autor
    Beiträge
    • #4238
      Anonym
      Inaktiv

      Wie speichere ich am gescheitesten Dateien ab, damit ich sie auch nach Schliessung des Programmes wieder abrufen kann.(Sowohl bei Android wie auch Windows)

    • #4242
      Klaus Major
      Verwalter

      Hallo Pesche,

      Windows -> specialfolderpath(„preferences“)
      Android -> specialfolderpath(„documents“)

      Gruß

      Klaus

    • #4250
      Anonym
      Inaktiv

      Mit welchem Befehl speichere ich eine Variable ab und wie hole ich sie wieder?

    • #4251
      Klaus Major
      Verwalter

      Hallo Pesche,

      ein kleines Beispiel:

      ...
        if the environment = "mobile" then
            
            ## Unter iOs und Android haben wir nur hier Schreibrechte!
            put specialfolderpath("documents") into tZielPfad
         else
            
            ## Wir sind auf Desktop Mac oder Windows
            ## und hier sollten wir unsere Prefs ablegen
            put specialfolderpath("preferences") into tZielPfad
         end if
         
         ## Nun den kompletten Pfad zusammenbasteln
         ## Da nur wir mit dieser Datei arbeiten, ist es Wuscht,
         ## wie sie heisst und ob sie ein Suffix hat
         put "/meine_prefs.prf" after tZielPfad
         
         put deine_variable_hier into url("file:" & tZielPfad)
         ## Fertig :-)
      ...

      Gruß

      Klaus

    • #4252
      Klaus Major
      Verwalter

      Ach so, wieder einlesen geht dann mit obiger Beispieldatei so:

      ...
         if the environment = "mobile" then
            
            ## Unter iOS und Android haben wir nur hier Schreibrechte!
            put specialfolderpath("documents") into tZielPfad
         else
            
            ## Wir sind auf Desktop Mac oder Windows
            ## und hier sollten wir unsere Prefs ablegen
            put specialfolderpath("preferences") into tZielPfad
         end if
         
         ## Nun den kompletten Pfad zusammenbasteln
         ## Da nur wir mit dieser Datei arbeiten, ist es Wuscht,
         ## wie sie heisst und ob sie ein Suffix hat
         put "/meine_prefs.prf" after tZielPfad
         
         ## IMMER zuerst alles überprüfen!
         if there is a file tZielPfad then
            put url("file:" & tZielPfad) into deine_variable_hier
         end if
         ## Fertig
      ...
    • #4253
      Anonym
      Inaktiv

      Danke endlich klappts:):)

    • #4254
      Klaus Major
      Verwalter

      Ja, kaum macht man’s richtig, schon funktioniert’s! 🙂

    • #5951
      Jan
      Teilnehmer

      Moin
      Kann mir einer sagen ob folgendes funktionirt?

      on openStack
      if there is a file data01 then
      put url(„file:“ & Kantine & „/Data01.txt“) into data01
      put data01 into field „Fd1“ of card „auswahl01“
      put field „Fd1“ of card „auswahl01“ into field „Fd01“ of card „menue“
      end if
      end openStack

      und

      on mouseUp

      put field „Fd01“ into data01

      put specialFolderPath(„documents“) into Kantine
      if there is NOT a folder Kantine then
      create folder Kantine
      end if

      put data01 into url(„file:“ & Kantine & „/Data01.txt“)

      if the result <> EMPTY then
      answer „Fehler beim Schreiben der Datei!“ & CR & the result
      end if
      end mouseUp

      Weil mein LiveCode immer noch nich den JDK Path findet, wäre es super nett (falls es so funktioniert) wenn mir das dann nochmal einer in ne apk umwandeln könnte!?!

      Gruß Jan

    • #5953
      Klaus Major
      Verwalter

      Hallo Jan,

      Du musst zuerst die Datei definieren, sonst läuft Dein IF IMMER ins Leere!

      on openStack
        put specialfolderpath("documents") & "/Data01.txt" into tFile
        if there is a file tFile then
         put url("file:" & tFile) into data01
         put data01 into field "Fd1" of card "auswahl01"
          put field "Fd1" of card "auswahl01" into field "Fd01" of card "menue"
         end if
      end openStack
      on mouseUp
        put field "Fd01" into data01
        put specialFolderPath("documents") into Kantine
        ## Dieser Ordner ist IMMER und ÜBERALL vorhanden!
        ## Das hier ist also überflüssig.
        ##if there is NOT a folder Kantine then
        ##create folder Kantine
        ##end if
        put data01 into url("file:" & Kantine & "/Data01.txt")
        if the result <> EMPTY then
         answer "Fehler beim Schreiben der Datei!" & CR & the result
        end if
      end mouseUp

      Ich besitze weder Handy noch Tablet und entwickle nicht für die mobile Platform, daher kann ich Dir nicht mit einem APK dienen.

      Gruß

      Klaus

    • #5955
      Jan
      Teilnehmer

      Trotzdem vielen Dank Klaus.
      Wenn ich mehrere Felder habe, welche Zahlen muss ich dann beim openStack in 02 und so weiter ändern?
      Wenn ich das weiß bekomm ich das für alle anderen hin!

    • #5957
      Klaus Major
      Verwalter

      Hallo Jan,

      Wenn ich mehrere Felder habe, welche Zahlen muss ich dann beim openStack in 02 und so weiter ändern?

      tut mir leid, ich verstehe die Frage nicht?

      Gruß

      Klaus

    • #5959
      Jan
      Teilnehmer

      funktioniert das dann so?
      put specialfolderpath(„documents“) & „/Data01.txt“ into tFile
      if there is a file tFile then
      put url(„file:“ & tFile) into data01
      put data01 into field „Fd1“ of card „auswahl01“
      put field „Fd1“ of card „auswahl01“ into field „Fd01“ of card „menue“
      end if

      put specialfolderpath(„documents“) & „/Data02.txt“ into tFile
      if there is a file tFile then
      put url(„file:“ & tFile) into data02
      put data02 into field „Fd1“ of card „auswahl02“
      put field „Fd1“ of card „auswahl02“ into field „Fd02“ of card „menue“
      end if

      oder muss ich tFile aunoch ne Zahl zuweisen, wie z.B. tFile01, tFile02….

    • #5961
      Klaus Major
      Verwalter

      Ach so, verstehe, nein, die Variable „tFile“ wird ja immer wieder überschrieben, also hat sie immer den korrekten Wert. Variablen sind durch aus „recyclebar“. 🙂

      Hinweis:
      Zugriff auf Variablen ist VIEEEEEEL schneller als der Zugriff auf Felder in Livecode, daher empfehle ich:

      put data01 into field „Fd1“ of card „auswahl01“
      ## put field „Fd1“ of card „auswahl01“ into field „Fd01“ of card „menue“
      put data01 into field „Fd01“ of card „menue“

    • #5963
      Jan
      Teilnehmer

      OK, verstehe.
      Vielen Dank

    • #5992
      Jan
      Teilnehmer

      Leider speichert er nicht die Daten wenn ich die App schließe 🙁

    • #5994
      Klaus Major
      Verwalter

      Wann und wo rufst Du denn Dein „Speichern“-Skript auf?

    • #5996
      Jan
      Teilnehmer

      Also;
      wenn ich in der App einen Wert in der „auswahl“card eintrage und dann den Zurück-Button drücke soll er das Speichern!

    • #5998
      Jan
      Teilnehmer

      https://ufile.io/07iiw
      Hier hab ich den Stack hochgeladen

    • #6000
      Klaus Major
      Verwalter

      Ok, sieht so aus, als hätten ALLE Deine „Zurück“ Buttons ein Problem!

      Button „btnBack“ auf Karte „auswahl01“:
      Die Variable „kantine“ ist nirgendwo definiert.
      Also gibt es die Fehlermeldung, die Du siehst, bitte so etwas immer hier mitteilen!

      Button „btnBack“ auf Karte „auswahl03“:
      Die Variable „data01“ ist LEER, bzw, noch nicht mit Werten gefüllt.

      Auf allen anderen Karten wird es ähnlich aussehen, da musst Du aber nochmal ran…

      Und das hier hatten wir doch auch schon:

      ...
        put specialFolderPath("documents") into Kantine
         if there is NOT a folder Kantine then
            create folder Kantine
         end if
      ...

      ???

    • #6002
      Jan
      Teilnehmer

      sry bin nur blutiger Anfänger.
      Habe auch keine Fehlermeldung bekommen, weil ich voller Euphorie das gleich umwandeln lassen hab und dann gleich auf dem Tablet laufen ließ.
      Werde mich nochmal dransetzen.

      Danke dir Klaus

    • #6021
      Jan
      Teilnehmer

      https://ufile.io/l99u8

      Funktioniert leider immer noch nich auf dem Tablet. Mag nochmal bitte einer draufgucken

    • #6023
      Klaus Major
      Verwalter

      Bleiben wir mal bei der Karte „auswahl01“, alle anderen Karten sind ja beinahe identisch.
      Das Skript von Button „zurück“ ist korrekt und erzeugt auf meinem Mac auch besagte Datei in meinem Dokumentenordner.

      Es SOLLTE also auch auf Deinem Handy funktionieren, keine Ahnung, warum es das nicht tut?!
      Hier müssen Experten der mobilen Platform ran.

      Aber ein paar Hinweise zur Effektivität!
      Hier ein „openstack“ Handler, der ETWAS kürzer als Deiner, aber auch effektiver ist. 🙂

      on openstack
         ## Wir erzwingen eine führende NULL bei den Zahlen im Loop,
         ## damit wir Deine Numerierung im LOOP beibehalten konnen
         set numberformat to "00"
         
         ## Du hast 24 Karten, also möglicherweise auch 24 "Präferenzen" Dateien.
         ## Wir benutzen den LOOP, um alle benötigten Dateinamen zu erstellen und 
         ## nacheinander abzuarbeiten.
         repeat with i = 1 to 24
            
            ## Hiermit (setzen des numberformat PLUS anschliessender Rechenoperation) 
            ## wird aus 1,2,3 etc. im LOOP 01,02,03 etc!
            put specialfolderpath("documents") & "/Data" & (i + 0) & ".txt" into tFile
            if there is a file tFile then
               put url("file:" & tFile) into tData
               
               ## ergibt im LOOP immer den korrekten Namen des Feldes!
               put tData into field "Fd1" of card ("auswahl" & i + 0)
               
               ## Wie gesagt, zugriff auf Variablen ist 1000* schneller als der Zugriff auf Felder!
               put tData into field ("Fd" &  i + 0) of card "menue"
            end if
         end repeat
         go cd "menue"
      end openstack

      Die Skripte der verschiedenen Buttons sind ja ähnlich gelagert und bieten viel Raum für Verbesserung. Aber lass dir das Skript erst mal auf der Zunge zergehen. 🙂

      Kleine Frage, wie hast Du es geschafft, daß man in Deinem Stack kein Objekt mit der Maus auswählen kann? Ich muss über den „Project Brwoser“ gehen, um Objekte auszuwählen etc.

      Gruß

      Klaus

    • #6025
      Jan
      Teilnehmer

      Ok trotzdem danke.
      Werde mir das mal anschauen.

      Beim Project Browser habe ich hinter jedem Objekt ein Auge für Visible/Invisible und ein Schloß mit dem ich die Objekte sperren kann.
      Wenn man keine Ahnung hat, spielt man halt n bissl rum 😉

    • #6042
      Klaus Major
      Verwalter

      Werde mir das mal anschauen.

      Das ist unbedingt anzuraten!
      Und bitte frage nach, wenn Du etwas nicht verstehst, ich erkläre das gerne!

      Beim Project Browser habe ich hinter jedem Objekt ein Auge für Visible/Invisible und ein Schloß mit dem ich die Objekte sperren kann.

      Ah, OK, das war MIR wiederum neu, hatte ich noch nie benutzt. 🙂

      Wenn man keine Ahnung hat, spielt man halt n bissl rum ?

      Ist ja auch OK, solange der Schuss nicht nach hinten losgeht!

      Hier hat er mir, und allen, die sich den Stack angeschaut haben, das Leben etwas schwerer als nötig gemacht. 😎

    • #6070
      Jan
      Teilnehmer

      habe es jetzt so versucht:

      set the defaultFolder to specialFolderPath(„documents“)
      put field „Fd1“ into url(„file:/Data02.txt“)

      sagt das tablet:
      „fehler beim schreiben der Datei!
      can’t open file“

      beim testen auf dem rechner keine probleme

      hab im netz sonst noch die variante open file, read from file, close file und write to file gefunden.
      Wäre das ne Möglichkeit? sieht aber eher nach Windows aus

    • #6072
      Klaus Major
      Verwalter

      Hi Jan,

      es besteht kein Grund, den „defaultfolder“ zu setzen, wenn man den absoluten Pfad nutzen kann!
      Probiere mal Folgendes aus, wie ich es oben auch schon geschrieben hatte:

      ...
      put specialFolderPath("documents") & "/Data02.txt" into tFile
      put field "Fd1" into url("file:" & tFile)
      ...

      Oder, wenn es unbedingt mit DEFAULTFOLDER sein muss:

      ...
      set the defaultFolder to specialFolderPath("documents")
      put field "Fd1" into url("file:Data02.txt")
      ## OHNE Slash vor dem Namen!
      ...

      Gruß

      Klaus

    • #6074
      Jan
      Teilnehmer

      Danke Klaus.
      Ich versuche halt immer noch das Problem zu lösen, dass er nicht auf dem android tablet speichert beim Schließen der App.

    • #6076
      Klaus Major
      Verwalter

      Ist mir schon klar, aber da „put xxx into url…“ defintiv korrekte Syntax ist, schiesse ich hier ein wenig ins Blaue hinein.

      Bitte auch immer unbedingt THE RESULT checken nach einem Schreibvorgang:

      ...
      put fld "F01" into url...
      if the result <> EMPTY then
        answer "Fehler beim Schreiben:" && the result
      end if
      ...

      „can’t open file“ bedeutet, daß wir hier keine Schreibrechte haben, was wir aber eigentlich im Dokumenten Ordner IMMER haben. daher sollte mal ein Experte für mobilen Kram sich der Sache hier annehmen.

      Wenn „put xxx into URL…“ nicht funktioniert, wird das von Dir oben erwähnte „open file“ etc. auch nicht funktionieren.

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