Preferences

Anfängerfragen zum Programmieren mit PureBasic.
Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

Preferences

Beitrag 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ß
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Preferences

Beitrag 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
a²+b²=mc²
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Preferences

Beitrag von rolaf »

Oder jeder Zeile nen extra Eintrag spendieren. :mrgreen:

text1 = blah
text2 = blah blah
text3 = usw.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

Re: Preferences

Beitrag 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ß
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Preferences

Beitrag 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 

Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

Re: Preferences

Beitrag 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ß
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Preferences

Beitrag 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$)
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Preferences

Beitrag 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
a²+b²=mc²
Freizeitcoder
Beiträge: 35
Registriert: 24.09.2009 13:31
Wohnort: München

Re: Preferences

Beitrag 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ß
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Preferences

Beitrag 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:
Antworten