Seite 1 von 2

Preferences

Verfasst: 14.10.2009 23:22
von Freizeitcoder
Abend zusammen,

ich habe festgestellt, daß beim Laden von gespeicherten Preferences jeweils nur die 1.Zeile wieder ausgelesen wird. Im folgenden Beispiel ist "text" mein Keyword.

Code: Alles auswählen

text = diese Zeile wird gelesen!
diese nicht mehr
diese auch nicht mehr
und diese schon garnicht
Durch diesen Umstang bekomme ich einige Probleme. Ich kann natürlich die Zeilen einzeln aus einem EditorGadget oder sonstigem auslesen und hintereinander, in einer Zeile, abspeichern. Allerdings sind dann beim auslesen sämtliche Zeilenumbrüche verschwunden. Im nachhinein kann natürlich auch nicht mehr festgestellt werden wo mal ein Zeilenumbruch war.

Weiß vielleicht jemand ein Lösung?

Gruß

Re: Preferences

Verfasst: 14.10.2009 23:33
von Kiffi
Freizeitcoder hat geschrieben:Ich habe festgestellt [...]
Kiffi hat geschrieben:(nicht berücksichtigt im obigen Code sind Zeilenumbrüche in den jeweiligen
Werten. Die müssten dann gegebenenfalls escaped werden)
-> Vor dem Speichern alle Zeilenumbrüche durch ein Zeichen ersetzen, welches in Deinen Texten nicht vorkommt.
-> Nach dem Laden (vor der Anzeige) diese Zeichen wieder durch die Zeilenumbrüche ersetzen

Grüße ... Kiffi

Re: Preferences

Verfasst: 15.10.2009 07:27
von rolaf
Oder jeder Zeile nen extra Eintrag spendieren. :mrgreen:

text1 = blah
text2 = blah blah
text3 = usw.

Re: Preferences

Verfasst: 15.10.2009 07:53
von Freizeitcoder
Morgen,

für jede Zeile ein neuer Preference-Key zum Speichern fällt leider durch aus. Die Programmstruktur ist dafür nicht geeignet.
Ich werde mal das mit dem neuen Satzzeichen, zur Markierung der Zeilenumbrüche, ausprobieren.

Danke euch.
Gruß

Re: Preferences

Verfasst: 15.10.2009 10:07
von edel
Du koenntest es auch mit Regex versuchen.

Code: Alles auswählen

text = diese Zeile wird gelesen!
diese nicht mehr
diese auch nicht mehr
und diese schon garnicht

test = diese Zeile wird gelesen!
diese nicht mehr
diese auch nicht mehr
und diese schon garnicht

Code: Alles auswählen

ImportC ""
  pcre_exec(*pcre, *extra, subject.s, length, startoffset, options, *ovector, ovecsize)
  pcre_get_substring(subject.s, *ovector, stringcount, stringnumber, *stringptr)
  pcre_free_substring(*stringptr)
EndImport

Text$ = "text = diese Zeile wird gelesen!" + #LF$
Text$ + "diese nicht mehr" + #LF$
Text$ + "diese auch nicht mehr" + #LF$
Text$ + "und diese schon garnicht" + #LF$+ #LF$

Text$ + "test = diese Zeile wird gelesen!" + #LF$
Text$ + "diese nicht mehr" + #LF$
Text$ + "diese auch nicht mehr" + #LF$
Text$ + "und diese schon garnicht" + #LF$+ #LF$

subject.s = Text$
pattern.s = "(?s)(\w+)[ =]+(.*?)\n\n"
len = Len(subject)

Dim ovec(30)

If CreateRegularExpression(0,"(?s)(\w+)[ =]+(.*?)\n\n")
  
  While pcre_exec(PeekI(IsRegularExpression(0)), 0, subject, len, offset, 0, @ovec(), 30)>0
    
    pcre_get_substring(subject, ovec(), len, 1, @stringptr) ; first sub
    Debug PeekS(stringptr)
    pcre_free_substring(stringptr)
    
    pcre_get_substring(subject, ovec(), len, 2, @stringptr)
    Debug PeekS(stringptr)
    pcre_free_substring(stringptr)  
    
    offset = ovec(1)
  Wend 
  
  FreeRegularExpression(0)

Else
  Debug RegularExpressionError()
EndIf 


Re: Preferences

Verfasst: 15.10.2009 20:08
von Freizeitcoder
Abend,

ich habe nun die geschriebenen Zeilen im Editor ermittelt, der Reihe nach ausgelesen, und jeweils am Ende ein "#" eingefügt. Dieses Zeichen dient als meine Zeilenumbruchmarkierung. Beim auslesen wollte ich dieses Zeichen einfach mit "ReplaceString" durch einen Zeilenumbruch ersetzten. So einfach wie genial *lach* Leider hatte ich nicht damit gerechnet "ReplaceString" einen String zum austauschen übergeben zu müssen.

Tja, sah ganz lustig aus, als nach etwa 10 Zeichen im Editor immer wieder "+chr(10)+chr(13)" stand.
Welches Zeichen oder Befehl kann ich verwenden, um einem Befehl der einen String erwartet mitzuteilen einen Zeilenumbruch einzufügen.
In etwa so:
ReplaceString(text,"#",chr(10)+chr(13))

Gruß

Re: Preferences

Verfasst: 15.10.2009 20:10
von HeX0R

Code: Alles auswählen

#CRLF$
[Edit]
Aber dein Code macht das selbe...

Übrigens ist # eigentlich eher ungeeignet.
Ich benutze für sowas immer \n, was eher selten im Text vorkommen sollte, also:

Code: Alles auswählen

ReplaceString(Text$, "\n", #CRLF$)

Re: Preferences

Verfasst: 15.10.2009 20:21
von Kiffi
Freizeitcoder hat geschrieben:ich habe nun die geschriebenen Zeilen im Editor ermittelt, der Reihe nach ausgelesen, und jeweils am Ende ein "#" eingefügt.
kann es sein, dass Du ein wenig zu sehr um die Ecke denkst?

Code: Alles auswählen

; Schreiben:
WritePreferenceString("preparation"+Str(i),ReplaceString(meal()\preparation, #CRLF$, DeinZeichen.s)

; Lesen:
meal()\preparation = ReplaceString(ReadPreferenceString("preparation"+Str(i),"0"), DeinZeichen.s, #CRLF$)
Du musst allerdings dafür sorgen, dass 'DeinZeichen' nicht vom Anwender selber in Deiner Applikation eingegeben werden darf.

Grüße ... Kiffi

Re: Preferences

Verfasst: 15.10.2009 21:27
von Freizeitcoder
ah spitze. Mit Hexor´s Zeichen funktioniert es.

@Kiffi: Sieht auch gut aus, und macht gleich alles in einem Schritt, allerdings muß ich es dreimal lesen bis ich verstehe was ich damit machen kann. ;) Trotzdem danke für den Hinweis.

Bei der Gelegenheit hätte ich auch gleich noch eine andere Frage:
Wo habt ihr diese Konstanten her, bzw wo finde ich die Beschreibungen dazu. Wo das her kommt, gibt es doch bestimmt noch mehr! ;)

#CRLF$ << kann ich mir nun erklären
#LF$ << ???

Danke und Gruß

Re: Preferences

Verfasst: 15.10.2009 21:32
von ts-soft
Freizeitcoder hat geschrieben: #CRLF$ << kann ich mir nun erklären
#LF$ << ???
Das eine ist ein Wagenrücklauf mit Zeilenvorschub, das andere ist nur ein Zeilenvorschub :wink: