String Manipulationen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

String Manipulationen

Beitrag von Criss »

Hi zusammen,

folgendes Problem, macht mir Kopfzerbrechen!

string.s(1) = "x yy zzz x x"
string.s(2) = "bla bla bla txt txt txt"
string.s(3) = " zzz yya x zzz"
string.s(4) = "bla bla bla txt txt txt"

Dies sind die vorgegeben Strings, als Beispiel! Natürlich sind
die Strings immer wieder verschieden!


Ok, nun muss ich einen Weg finden, wie ich die Zeichen:

x, yy und zzz

in:

u, vv und www ändern kann! Und von u,vv,www in r, ss, ttt etc. (Alphabet rückwärts)

UND einen Weg um diese Zeichen überhaupt zu erkennen, d.h. x, yy und zzz und noch weitere sind in Data-Anweisungen vorgegeben!

Das ganze wird in einem Editorgadget angezeigt und soll sich per Buttonklick ändern können!


Tausend Dank, schonmal zum voraus!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Vielleicht so?

Code: Alles auswählen

string.s(1) = ReplaceString(string.s(1), "x ", "w ")
Aber mal was anderes:
Wieso wird bei dir aus [c]'x' -> 'u' -> 'r'[/c], aus [c]'yy' -> 'vv' -> 'ss'[/c] und aus [c]'zzz' -> 'www' -> 'ttt'[/c]?
Du sagtest doch, dass das ganze rückwärts gehen soll, oder? Dann siehst das nämlich so für mich aus:
[c]'x' -> 'w' -> 'v'
'yy' -> 'xx' -> 'ww'
'zzz' -> 'yyy' -> 'xxx'[/c]
Ode etwas nicht?
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

unabhängig von groß und kleinschreibung - wäre dies die richtung in die es gehen soll ?

Code: Alles auswählen

alphabetIndex.s="abcdefghijklmnopqrstuvxyz"
text.s="dies ist ein kleiner testtext"
For x=1 To Len(text)
  If Mid(text,x,1)=" " ;oder sonstige satzzeichen, sonderzeichen
    ergebnis.s+" "
  ElseIf Mid(text,x,1)="a"
    ergebnis.s+"z"
  Else
    ergebnis.s+Mid(alphabetIndex,FindString(alphabetIndex,Mid(text,x,1),1)-1,1)
  EndIf
Next
Debug ergebnis
Benutzeravatar
Criss
Beiträge: 126
Registriert: 21.09.2004 18:45
Kontaktdaten:

Beitrag von Criss »

Danke schonmal,

das mit dem Replacestring ist schon in Ordnung zum ersetzen, bin ich auch schon am proben! Aber das mit der Erkennung der Zeichen ist etwas komplizierter als ich geschrieben habe!

Also, ich versuchs nochmals anders!

Vergiss erstmal das mit dem Alphabet, ist nicht massgebend! Wobei Du natürlich schon recht hast mit der Reihenfolge!


Die Reihenfolge der Zeichen ist genau festgelegt: (sind nämlich Akkorde)

"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"
"Cm", "C#m", "Dm", "D#m", "Em", "Fm", "F#m", "Gm", "G#m", "Am", "A#m", "Bm"


Die Textdatei die im Editorgadget angezeigt wird, sieht z.b. so aus:

*****************************
Knocking on Heaven's Door
Bob Dylan


G D Am
Mama take this badge of of me,
G D C
I can't use it anymore
G D Am
It's getting dark, too dark to see

etc.
*****************************

Wie finde ich hier nun die Akkorde heraus, anhand der vorgegeben Strings (siehe oben!). Damit ich diese "Andersfarbig" anzeigen kann und schliesslich per Buttonklick transponieren (G -> G# / D -> D# etc.)?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Also ich würde mir eine Erkennungsroutine für die Akkorde schreiben, die sozusagen den Grundton der einzelnen Akkorde bestimmen kann und in eine Nummer umwandelt und den Reststring, also z.B. "7" oder "m6" oder "b", auch abspeichert. Am einfachsten geht das mit einer LinkedList und einer Structure mit zwei Elementen.
Jetzt fehlt noch eine Procedure, die diese LinkedList wieder umsetzen kann in einen String und eine Procedure, die die Nummer eines Grundtons transponieren kann. Sagen wir mal C = 0, C# = 1, Db = 2, usw. Also am besten noch enharmonisch verwechselte Töne unterscheiden, sonst verwirrt das später vielleicht etwas.
Das mit dem Einfärben im EditorGadget ist eigentlich ganz einfach. Aber dafür lasse ich dich mal lieber selbst suchen. Denn dafür gibt es schon zeig Routinen hier im alten Forum und in der PureArea.
Antworten