| 
| Autor | Beitrag |  
| Terra23 
          Beiträge: 872
 
 Win 8
 Delphi 7
 
 | 
Verfasst: Sa 07.07.12 21:24 
 
Hi Leute!
 Ich habe folgendes Problem:
 Ich habe einen Namen in einer String-Variablen (S), z.B. den Namen "Allure Of Darkness".
 Nun möchte ich gern den String durchgehen und folgendes tun:
 Alle Leerzeichen durch Tiefstriche ersetzen
Bestimmte Worte, z.B. "Of" oder "In" oder "The", sofern sie nicht am Anfang des Wortes stehen kleinschreiben, d.h. aus "Of" wird "of" aus "In" wird "in" usw...
 Das Ersetzen der Leerzeichen durch Tiefstriche würde ich sicherlich noch irgendwie hinbekommen (wahrscheinlich allerdings mit mehr Code als eigentlich nötig wäre) aber die zweite Aufgabenstellung bereitet mir Probleme.
 Kann mir da jemand mit Suchbegriffen oder so behilflich sein? Ich weiß leider nicht, wie ich das programmieren soll bzw. wonach ich suchen soll.
 Gruß,
 Terra_________________Hasta La Victoria Siempre |  |  |  
| Mathematiker 
          Beiträge: 2622
 Erhaltene Danke: 1448
 
 Win 7, 8.1, 10
 Delphi 5, 7, 10.1
 
 | 
Verfasst: Sa 07.07.12 21:38 
 
Hallo Terra23,
 	  |  Terra23 hat folgendes geschrieben  : |  	  | Alle Leerzeichen durch Tiefstriche ersetzen | 
 Das dürfte nicht allzu schwer sein, da jedes Zeichen mit dem Index i des Strings s mit s[i] angesprochen werden kann, z.B.
 		                       Delphi-Quelltext 
 									| 1:
 | for i:=1 to length(s) do if s[i]=' ' then s[i]:='_';					 |  	  |  Terra23 hat folgendes geschrieben  : |  	  | Bestimmte Worte, z.B. "Of" oder "In" oder "The", sofern sie nicht am Anfang des Wortes stehen kleinschreiben, d.h. aus "Of" wird "of" aus "In" wird "in" usw... | 
 Mit n:=pos(' Of ',s) wird der Index n des ersten Auftretens von " Of " (mit Leerzeichen!) im String genannt. Dann müsstest Du s[n+1] gleich 'o' setzen. Da nach ' Of ' und nicht nach 'Of' gesucht wird, steht dein Wort auch nicht am Anfang.
 Nach der 1.Tauschaktion wird erneut gesucht (while-Schleife) bis n=0 ist, d.h. das Wort ' Of ' nicht mehr in dieser Großschreibweise auftritt.
 Danach alles noch einmal mit ' In ' und ' The ' usw.
 Solltest Du erst die Leerzeichen durch '_' ersetzen, musst Du natürlich nach '_Of_' usw. suchen.
 Beste Grüße
 Mathematiker_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
 |  |  |  
| bummi 
          Beiträge: 1248
 Erhaltene Danke: 187
 
 XP - Server 2008R2
 D2 - Delphi XE
 
 | 
Verfasst: Sa 07.07.12 21:39 
 
ad 1 . StringReplace
ad 2 . was meinst Du mit am Anfang eines Worte (anfange eines Satzes?)
 _________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
 DRY DRY KISS
 |  |  |  
| Terra23  
          Beiträge: 872
 
 Win 8
 Delphi 7
 
 | 
Verfasst: Sa 07.07.12 21:51 
 
@Beide: Danke für die Tipps. Für das Ersetzen der Leerzeichen habe ich schon was gefunden im Programm "EasyHelper".
 @Mathematiker: Stimmt, du hast Recht. Wenn ein Leerzeichen vor dem "Of" steht, kann es ja nicht am Wortanfang stehen. Ich probiere es mal.
 
 @bummi: Wenn der String z.B. heißt "The Winged Dragon Of Ra" (es geht in dem Programm um Sammelkartenspiele), dann soll er das "The" nicht kleinschreiben, da es direkt am Anfang vom String steht. Das "Of" in diesem String soll er allerdings dann kleinschreiben, da es im String steht.
 
 Gruß,
 
 Terra
 _________________Hasta La Victoria Siempre |  |  |  
| bummi 
          Beiträge: 1248
 Erhaltene Danke: 187
 
 XP - Server 2008R2
 D2 - Delphi XE
 
 | 
Verfasst: Sa 07.07.12 22:00 
 
		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 
 | vars:String;
 begin
 s :='The Winged Dragon Of Ra';
 s := Lowercase(StringReplace(s,' ','_',[rfReplaceAll]));
 s[1] := Uppercase(S)[1];
 Showmessage(s);
 end;
 | _________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
 DRY DRY KISS
 |  |  |  
| Terra23  
          Beiträge: 872
 
 Win 8
 Delphi 7
 
 | 
Verfasst: Sa 07.07.12 22:06 
 
	  |  bummi hat folgendes geschrieben  : |  	  | 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 
 | vars:String;
 begin
 s :='The Winged Dragon Of Ra';
 s := Lowercase(StringReplace(s,' ','_',[rfReplaceAll]));
 s[1] := Uppercase(S)[1];
 Showmessage(s);
 end;
 |  | 
 Damit macht er aber alle Worte klein, außer dem, das am Anfang steht. Er soll ja nur die Worte "Of", "In", "The" kleinschreiben.
 Die Leerzeichen ersetze ich durch diesen Code:
 		                       Delphi-Quelltext 
 									| 1:2:
 
 | While Pos(' ', S) > 0 DoS[Pos(' ', S)] := '_';
 |  Hab es jetzt aber für "Of" und die anderen Worte hinbekommen:
 		                       Delphi-Quelltext 
 									| 1:
 | S := StringReplace(S, ' Of', ' of', [rfReplaceAll]);					 |  Danke für eure Hilfe, Jungs..._________________Hasta La Victoria Siempre |  |  |  
| bummi 
          Beiträge: 1248
 Erhaltene Danke: 187
 
 XP - Server 2008R2
 D2 - Delphi XE
 
 | 
Verfasst: Sa 07.07.12 22:11 
 
Genau da hatte ich die Probleme erwartet, was sollen denn die Entscheidungskriterien dafür sein was groß bleiben, oder klein geschrieben werden soll (? eine Liste mit Worten).Moderiert von  Narses: Beiträge zusammengefasst 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 | procedure TForm2.Button1Click(Sender: TObject);Const
 C_REPL:Array[0..2] of String=('Of','In','The');
 var
 s:String;
 i:Integer;
 begin
 s :='The Winged Dragon Of Ra';
 s := StringReplace(s,' ','_',[rfReplaceAll]);
 for I := low(C_REPL) to High(C_REPL) do
 s := StringReplace(s,'_'+C_REPL[i]+'_','_'+Lowercase(C_REPL[i])+'_',[rfReplaceAll]);
 
 Showmessage(s);
 end;
 | _________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
 DRY DRY KISS
 |  |  |  
| Terra23  
          Beiträge: 872
 
 Win 8
 Delphi 7
 
 | 
Verfasst: Sa 07.07.12 22:17 
 
Ja, es geht, wie bereits gesagt, um bestimmte Worte wie eben "Of", "In" oder "The".
 Ich erkläre es mal kurz:
 Mein Programm soll per Klick auf einen String auf eine Website verlinken. Das Problem ist, dass in meinem Programm zwar alle Strings englisch sind, aber die Worte alle groß beginnen.
 Nehmen wir wieder das Beispiel: The Winged Dragon Of Ra
 Wenn ich nun auf die Website verlinken will, muss ich zuerst mal das Wort "Of" klein schreiben und dann die Leerzeichen entfernen, da die Website anders nicht aufzurufen wäre.
 Wenn ich den String nun verändert habe, heißt er: The_Winged_Dragon_of_Ra
 Und nun kann ich auch die Website aufrufen und lande hier:
Klick Ich muss den String also zum Aufruf der Website der Website entsprechend anpassen. Und die arbeitet nunmal so, dass bestimmte Worte innerhalb eines Namens klein geschrieben sind. Wenn ich das "Of" groß lasse, kann ich die Seite nicht aufrufen...    Gruß,
 TerraModeriert von  Narses: Beiträge zusammengefasst @Bummi: Auch wenn ich deinen Array-Code nicht kapiere (hab Arrays noch nie kapiert), funktioniert es tadellos und ersetzt alles gleichzeitig, also die Worte werden klein und die Leerzeichen zu Tiefstrichen.
 Ich sehe das richtig, dass ich nun, falls da irgendwann weitere Worte auffallen, die von der Website klein verlangt werden, diese Worte im Array ergänzen kann?
 Gruß,
 Terra_________________Hasta La Victoria Siempre |  |  |  
| bummi 
          Beiträge: 1248
 Erhaltene Danke: 187
 
 XP - Server 2008R2
 D2 - Delphi XE
 
 | 
Verfasst: Sa 07.07.12 23:06 
 
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
 DRY DRY KISS
 |  |  |  
| Terra23  
          Beiträge: 872
 
 Win 8
 Delphi 7
 
 | 
Verfasst: Sa 07.07.12 23:08 
 
Vielen Dank euch beiden. Nun muss ich nur noch einen Weg finden, das Kartenbild einer jeden Seite bei Bedarf in ein Image laden zu können. Habe mir schon die Indy-Komponenten geladen und morgen suche ich mal ein wenig.
 Gruß,
 
 Terra
 _________________Hasta La Victoria Siempre |  |  |  
| FinnO 
          Beiträge: 1331
 Erhaltene Danke: 123
 
 Mac OSX, Arch
 TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
 
 | 
Verfasst: Sa 07.07.12 23:24 
 
Moin,
 also dass es dieses Yu-Gi-Oh noch gibt, verwundert mich aber schon, das war ja das letzte mal modern, als ich in der 5./6. Klasse war. Aber na ja, zurück zum Thema:
 
 Was spricht denn als Alternative, das Problem über die Suche zu erschlagen? Dann muss man intern nicht immer mit den Daten herumfiddeln.
 
 LG
 |  |  |  
| Terra23  
          Beiträge: 872
 
 Win 8
 Delphi 7
 
 | 
Verfasst: So 08.07.12 17:06 
 
Hi!
 Nein, die YGO-Community boomt wie verrückt; das Spiel ist beliebter als je zuvor. Aber zum Thema:
 
 Ich verstehe deinen Satz nicht, "das Problem mit der Suche zu erschlagen". Kannst du mir das erklären?
 _________________Hasta La Victoria Siempre |  |  |  
| FinnO 
          Beiträge: 1331
 Erhaltene Danke: 123
 
 Mac OSX, Arch
 TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
 
 | 
Verfasst: So 08.07.12 21:58 
 
Moin,
 na ja, du könntest case-insensitiv einfach die Suche des Wikis benutzen und dann den ersten Treffer auswerten.
yugioh.wikia.com/wik...&fulltext=Search Wenn du die Seite eh ausliest... Kann aber u.U. auch umständlicher sein - schade, dass die Seite keine "auf gut Glück"-Funktion bereitstellt. 
 LG |  |  |  |