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

Code: Alles auswählen

text\c[1] = Asc("e")
kann einfach so geschrieben werden:

Code: Alles auswählen

text\c[1] = 'e'
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