Korrektur eines Strings

Für allgemeine Fragen zur Programmierung mit PureBasic.
Blitzer
Beiträge: 79
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Korrektur eines Strings

Beitrag 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
Andesdaf
Moderator
Beiträge: 2658
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Korrektur eines Strings

Beitrag von Andesdaf »

ReplaceString()?
Win11 x64 | PB 6.00 (x64)
Blitzer
Beiträge: 79
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Re: Korrektur eines Strings

Beitrag 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.
ST4242
Beiträge: 42
Registriert: 29.10.2011 16:54

Re: Korrektur eines Strings

Beitrag 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
ST4242
Beiträge: 42
Registriert: 29.10.2011 16:54

Re: Korrektur eines Strings

Beitrag von ST4242 »

Hallo,

zur ergänzung in meinen Beispiel könnte man ansteller einer schleife natürlich ein einfaches Copymemory machen.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Korrektur eines Strings

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Korrektur eines Strings

Beitrag 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.
Bild
Blitzer
Beiträge: 79
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Re: Korrektur eines Strings

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Korrektur eines Strings

Beitrag 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.
Bild
Blitzer
Beiträge: 79
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Re: Korrektur eines Strings

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