Seite 1 von 1
Korrektur eines Strings
Verfasst: 08.08.2022 12:05
von Blitzer
Hallo,
ich suche eine einfache Möglichkeit, um den Text eines Strings zu ändern.
Beispiel:
Stringvorgabe$ = "Rächts abbiegen"
; (Rächts in 'e' ändern)
Blitzer
Re: Korrektur eines Strings
Verfasst: 08.08.2022 12:25
von Andesdaf
ReplaceString()?
Re: Korrektur eines Strings
Verfasst: 08.08.2022 13:05
von Blitzer
Das Beispiel auf Seite 1466 in der Hilfe lautet:
String \ $ = ReplaceString ( String$ , StringToFind$ , Replacement String$ [ , Mode [ , StartPosition [ , bOccurrences ]]])
Ich brauche nichts suchen oder gleiches zu ersetzen, sondern nur ein 'e' gegen ein 'ä' an zweiter Position zu tauschen.
Als Textbeispiel hätte auch eine Handynummer herhalten können, die korrigiert werden sollte.
Ein einfaches Lösungsbeispiel reicht mir.
Re: Korrektur eines Strings
Verfasst: 08.08.2022 13:46
von ST4242
Hallo meinst Due vielleicht so?
Code: Alles auswählen
Define Text.s
Define Pos.i
Define TextInsert.s
Define pt.i,pi.i,li.i
#soc=2 ; für jedes Zeichen werden 2 Bytes im Speicher belegt - unciode -
; KOMOFRTABEL
Text="Rächts"
TextInsert="e"
li=Len(TextInsert)
pos=2
If Len(text)-pos+1>=li
pt=(pos-1)*#soc+@text
pi=@TextInsert
While li>0
PokeC (pt,PeekC(pi))
pt+#soc
pi+#soc
li-1
Wend
EndIf
Debug text
;EINFACH
Text="Rächts"
pos=2
pt=(pos-1)*#soc+@text
PokeC (pt,Asc("e"))
Debug text
Grüße
Re: Korrektur eines Strings
Verfasst: 08.08.2022 13:48
von ST4242
Hallo,
zur ergänzung in meinen Beispiel könnte man ansteller einer schleife natürlich ein einfaches Copymemory machen.
Re: Korrektur eines Strings
Verfasst: 08.08.2022 14:41
von hjbremer
Code: Alles auswählen
Stringvorgabe$ = "Rächts abbiegen"
ReplaceString(Stringvorgabe$, "ä", "e", #PB_String_InPlace, 2, 1)
Debug Stringvorgabe$
;oder
Code: Alles auswählen
Stringvorgabe$ = "Rächts abbiegen"
Debug Left(Stringvorgabe$, 1) + "e" + Mid(Stringvorgabe$, 3)
;oder
Code: Alles auswählen
Structure Strings
StructureUnion
s.s{100} ;muß FixString sein
c.w[0] ;direkter Zugriff auf den String im Memory via Index ab null, !! Unicode x64 !!
EndStructureUnion
EndStructure
Stringvorgabe$ = "Rächts abbiegen"
text.Strings
text\s = Stringvorgabe$
text\c[1] = Asc("e")
Debug text\s
Edit by NicTheQuick: Code-Tags hinzugefügt
Re: Korrektur eines Strings
Verfasst: 08.08.2022 14:46
von NicTheQuick
Blitzer hat geschrieben: 08.08.2022 13:05
Das Beispiel auf Seite 1466 in der Hilfe lautet:
String \ $ = ReplaceString ( String$ , StringToFind$ , Replacement String$ [ , Mode [ , StartPosition [ , bOccurrences ]]])
Ich brauche nichts suchen oder gleiches zu ersetzen, sondern nur ein 'e' gegen ein 'ä' an zweiter Position zu tauschen.
Als Textbeispiel hätte auch eine Handynummer herhalten können, die korrigiert werden sollte.
Ein einfaches Lösungsbeispiel reicht mir.
Zwei Fragen:
1. Von welcher PB-Hilfe redest du? Weil da gibt es doch keine Seitenzahlen.
2. Was genau ist jetzt das Problem mit ReplaceString? Wie willst du den Text denn sonst korrigieren? Du brauchst ja eine Regel, nach der du einen Fehler findest und beseitigst. Und wenn es um Wörter geht, dann wäre ein Wörterbuch sinnvoll und
die Levenshtein-Distanz um herauszufinden, ob ein Wort falsch ist und wie man es am sinnvollsten korrigiert.
Re: Korrektur eines Strings
Verfasst: 08.08.2022 16:04
von Blitzer
Also erst mal Dank an alle. Ich finde es bemerkenswert, gleich 4 Lösungen in so kurzer Zeit angeboten zu bekommen.
Da scheint was brauchbares dabei zu sein. Früher im letzten Jahrhundert, da gab es u.a. eine Programmiersprache, die zum direkten Ersetzen von Stringinhalten einen Befehl bereitstellte. Also ähnlich wie, ersetze ab Position x den String mit "aBcD" (hier 4-Stellen). ReplaceString gibt es als Befehl auch in AppGameKit oder auch anderen Sprachen.
@NicTheQuick
zu 1)
PureBasic Reference Manual 6.00, vom 01.07.2022, geöffnet mit XReader 3.4.3 unter Linux. Die Seitenzahlen werden automatisch gezählt.
zu 2)
Ich werde mein Problem kurz umschreiben. In einer Anwendung werden zum Beispiel 100 Zustände in Form von Zeichen, bzw. Sonderzeichen in einem String abgelegt. Diese Zustände können sich ändern und müssen inhaltlich im String angepasst werden.
Es kann auch vorkommen, daß 2 Zustände an unterschiedlichen Positionen getauscht werden müssen.
Ein ganz abstraktes Beispiel: Du spielst Karten und nur dein Blatt auf der Hand muss neu gemischt werden.
Re: Korrektur eines Strings
Verfasst: 08.08.2022 16:10
von NicTheQuick
Aha, ich verstehe.
Dann würde ich die letzte Version von hjbremer präferieren.
Und dazu habe ich nur einen Verbesserungsvorschlag. Diese Zeile
kann einfach so geschrieben werden:
Aber das funktioniert so trotzdem nur mit einzelnen Zeichen und keinen längeren Strings.
Re: Korrektur eines Strings
Verfasst: 08.08.2022 17:10
von Blitzer
Ja, danke für die Anregungen.
@hjbremer
Etwas optimiert ...
Stringvorgabe$ = "Rechts abbiegen" : Zifferpos = 7
Debug Left(Stringvorgabe$, Zifferpos - 1) + "+" + Right(Stringvorgabe$, Len(Stringvorgabe$) - Zifferpos)
In der Kürze liegt die Würze... Problem gelöst
Blitzer