StringReplace + Frage zu Functions()

Anfängerfragen zum Programmieren mit PureBasic.
OptimusPrime
Beiträge: 43
Registriert: 07.03.2005 16:52

StringReplace + Frage zu Functions()

Beitrag von OptimusPrime »

Hallo,

StringReplace ersetzt ja alle vorkommenden Zeichen oder Zeichenketten innerhalb eines Strings, wie aber ersetze ich Zeichen aber nur einmal ab einer bestimmten Position, bzw. wie ersetze ich ein Zeichen an einer bestimmten Position, egal was an dieser Stelle im String steht ?

Bsp:
"hallo" - nur das erste "l" mit einem "k" ersetzen = "haklo"
"hallo" - position 2 ersetzen mit "k", egal ob dort nun ein "a" oder sonst etwas steht.

Eine andere Frage habe ich zu den Prozeduren,
warum heissen die nicht function() ?
Das ist doch in Basic eiegntlich so übrlich, dachte ich immer
und kenne das auch so von Amiga-Basic.

Procedure errinnert mich immer irgendwie an Pascal... brrrrr

mfg
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Das mit den Proceduren und function() weiß ich nicht aber das mit dem ersetzen. Wenn du die Zeichen vor dem 1. l in einer Variable speicherst also "Ha" und die Zeichen nach dem 1. l in einer Variable speicherst also "lo" dann willst du das 1. l mit einem k ersetzen also

Code: Alles auswählen

neueswort = teil1 + "k" + teil2
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
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:

Beitrag von NicTheQuick »

Das ist jetzt vielleicht nicht ganz Anfänger-konform, aber ich würde das durch direkte Stringspeicher-Manipulation machen, also auch mit Pointern. Hier muss man als Parameter immer den Pointer (@) der Strings angeben. [c]*String[/c] ist der zu veränderte String und das erste Zeichen in [c]*CharToReplace[/c] wird verwendet um es mit dem in [c]Position[/c] angegebenen Zeichen in [c]*String[/c] zu ersetzen.

Code: Alles auswählen

Procedure ReplaceOneChar(*String.BYTE, *CharToReplace.BYTE, Position.l)
  If *String And *CharToReplace And Position > 0
    Position - 1
    While *String\b And Position
      *String + 1
      Position - 1
    Wend
    *String\b = *CharToReplace\b
  EndIf
EndProcedure

String.s = "Hallo"

CharToReplace.s = "k"

ReplaceOneChar(@String, @CharToReplace, 3)

Debug String
Bei weiteren Fragen, frag einfach.
Bild
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Also ich hätte das so gemacht:

Code: Alles auswählen

teil1$ = Mid(wort$,1,2)
teil2$ = Mid(wort$,3,2)
neueswort$ = teil1$ + "k" + teil2$
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
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:

Beitrag von NicTheQuick »

Das ist dann aber wohl doch etwas zu speziell.

Versuch das ganze dann noch etwas allgemeiner zu machen, also z.B. als Funktion mit mehreren Parameter, damit man alles richtig einstellen kann, und schon kann man das auch richtig verwenden.

Meine Funktion ist dann zwar sicherlich noch etwas schneller, aber was solls. :allright:
Bild
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Mit Parametern würde das dann so aussehen:

Code: Alles auswählen

teil1$ = Mid(wort$,1,pos)
teil2$ = Mid(wort$,pos + 1,len(wort$))
neueswort$ = teil1$ + zeichen$ + teil2$
die Variablen müssten dann vorher festgelegt werden
Antworten