| Autor |
Beitrag |
SunnyDream
      
Beiträge: 36
WinXP
Delphi 7 Personal
|
Verfasst: So 04.06.06 11:32
Hi Liebe Community!
Ich arbeite wie vielleicht der Eine oder Andere schon mitbekommen hat an einem HTML Konverter.
Ich weiss, dass das jetzt nichts Besonderes ist, aber es macht mir Spaß an ihm herumzuschrauben und seine Funktionen ständig zu erweitern. Ausserdem hat es einen nicht zu verachtenden Lerneffekt für mich als Delphi-Neuling.
Mein Problem ist nun folgendes:
Ich möchte, dass die Benutzer meines Konverters Short-Tags verwenden können. z.B. [b]Test[/b].
Jetzt habe ich aber das Problem, dass ich beim besten Willen nicht weiss, wie ich "[b]" abfragen kann.
Mit eine for-to Schleife dürfte das nur schwer möglich sein, da ich ja zB mit Text[i] nur einzelne Buchstaben abfragen kann, ich müsste aber das komplette "[b]" abfragen und auch das "[/b]"....
Ist das irgendwie umsetzbar?
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: So 04.06.06 11:42
Wenn du eine Funktion, wie "Pos" meinst, würde ich dir einen Blick auf meine Website empfehlen. Dort findest du im Tutorial-Bereich eine Übersicht der wichtigsten String-Funktionen mit Erläuterungen und Source-Demo.
|
|
SunnyDream 
      
Beiträge: 36
WinXP
Delphi 7 Personal
|
Verfasst: So 04.06.06 11:52
Ich meine, dass mein Programm ein Shorttag wie zB [ b] erkennt, und wenn es dieses Tag erkannt hat die passende Funktion ausführt.
Also konkret: Er soll den eingegebenen Text auf [ b] und [ /b] überprüfen, findet er ein [ b] soll er an dieser Stelle im HTML Code ein <b> ausgeben, findet er ein [ /b] das entsprechende </b> ausgeben.
Die Ausgabe o.Ä. sind kein Problem, doch wie schaffe ich es das mein Programm die [ b] als Buchstabenfolge erkennt? Ich habe bisher nur Sachen kennen gelernt wie zB:
Delphi-Quelltext 1: 2: 3: 4: 5:
| for i:=1 to length(Text) do if Text[i] = 'b' then begin Text[i] := a; end |
Aber diese einfache Schleife ist wie gesagt nur in der Lage einzelne Buchstaben abzufragen in meinem Fall müsste aber eine Kette von Buchstaben abgefragt werden. Also nicht nur ein Buchstabe sondern "[ b]" müsste er erkennen.... Du verstehst?
Moderiert von Christian S.: BBCode aktiviert, ein paar Tags eingefügt
|
|
Born-to-Frag
      
Beiträge: 1094
Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
|
Verfasst: So 04.06.06 11:59
Delphi-Quelltext 1:
| StringReplace(aText, '[b]', '<b>', [rfReplaceAll]); |
greetz
_________________ Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: So 04.06.06 12:01
Delphi-Quelltext 1: 2: 3: 4: 5:
| if pos('[b]', Text) > 0 then begin Text[pos('[b]', Text)] := '<'; Text[pos('[b]', Text)+2] := '>'; end |
Das kann man noch besser machen, aber ich will dich nicht mit mehreren String-Funktionen auf einmal erschlagen.
|
|
SunnyDream 
      
Beiträge: 36
WinXP
Delphi 7 Personal
|
Verfasst: So 04.06.06 12:03
Ok Danke!
Ich werde mir dein Tutorial anschauen, da es ja scheinbar das war was ich suchte! Dnake euch 
|
|
Born-to-Frag
      
Beiträge: 1094
Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
|
Verfasst: So 04.06.06 12:03
@jasocul: sollte man das if nicht mit einem while ersetzen?
_________________ Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
|
|
SunnyDream 
      
Beiträge: 36
WinXP
Delphi 7 Personal
|
Verfasst: So 04.06.06 12:09
Ohje... Ich habe noch eine Frage, die hiermit garnichts zu tun hat
Langsam wirds mir schon fast peinlich, seit ich hier angemeldet bin hab ich euch nur mit Neulingsfragen durchlöchert =/
Ich möchte, dass mein HTML-Konverter eine Vorschau-Funktion hat. Also wenn der User auf den Button "Vorschau" klickt, soll die Ausgabe als "temp.html" an einem festgelegten Ort gespeichert werden, ohne dass er dies bestätigen muss. (Also ohne das "Speichern" Fenster). Dann soll die Datei als HTML geöffnet werden und nach beendigung des Programms gelöscht werden.
Wie man etwas speichert weiss ich. Ich habe das bisher mit SaveDialog gemacht, ich weiss sogar wie man den namen der Datei festlegt und auch wie man einen Datei-filter einstellt. Aber ich weiss nicht wie ich es anstellen muss, dass die Datei an einem festen Ort gespeichert wird, ohne dass sich das Speichern Fenster vorher öffnet... Wie man die Datei dann ausführt weiss ich auch nicht =(
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 04.06.06 12:16
Hallo!
Bitte ertselle für jede neue Frage auch einen neuen Thread. Zum einen wird das innerhalb des Threads immer ziemlich durcheinander, wenn mehrere Fragen drin stecken. Außerdem kann jemand, der mittel Suchfunktion eine Lösung für ein ähnliches Problem sucht, am Titel nicht mehr erkennen, dass der Thread interessant für ihn ist.
Da die ursprüngliche Frage geklärt ist, mache ich hier zu. Sollten dazu noch Nachfragen kommen, reicht eine kurze Nachricht an den virtuellen Ansprechpartner, dann öffnen wir wieder.
Grüße
Christian
//edit: Da doch noch Nachfragen bestehen, habe ich das Thema wieder geöffnet.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
SunnyDream 
      
Beiträge: 36
WinXP
Delphi 7 Personal
|
Verfasst: Mo 05.06.06 16:40
Hi!
Also bin nun dazu gekommen die Sache umzusetzen.
Jedoch stoße ich auf folgendes Problem, es wird einfach nichts Replaced.
Wie bereits erwähnt will ich in der Variable "RText" alle
Quelltext 1:
| [b],[/b],[i],[/i],[u],[/u] |
durch
Quelltext
ersetzen.
Hier mein Code:
- Funktion um Umlaute etc. zu ersetzen, hier soll auch das Replace von Statten gehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function Tform1.TextBearbeiten(InText: String): String; var ascii, i, ib: integer; begin RText:= ''; for i:=1 to length(InText) do begin ascii:= ord(InText[i]); case ascii of 228: RText:= RText + 'ä' ; 196: RText:= RText + 'Ä' ; 246: RText:= RText + 'ö' ; 214: RText:= RText + 'Ö' ; 252: RText:= RText + 'ü' ; 220: RText:= RText + 'Ü' ; 223: RText:= RText + 'ß' ; 13: RText:= RText + chr(13) + chr(10) + '<br' ; 10: RText:= RText + '>' + chr(13) + chr(10); else RText:= RText + chr(ascii); end;
StringReplace(RText, '[b]', '<b>', [rfReplaceAll]); StringReplace(RText, '[/b]', '</b>', [rfReplaceAll]); StringReplace(RText, '[i]', '<i>', [rfReplaceAll]); StringReplace(RText, '[/i]', '</i>', [rfReplaceAll]); StringReplace(RText, '[u]', '<u>', [rfReplaceAll]); StringReplace(RText, '[/u]', '</u>', [rfReplaceAll]);
result:= RText; end; end; |
-Hier wird das Ergebnis der Funktion Textbearbeiten aufgerufen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Konvertieren1Click(Sender: TObject);
begin InText:= MInput.Text; OutText:= TextBearbeiten(InText);
with ROutPut.SelAttributes do begin Color:= clblue; end; ROutput.Lines.Add(OutText); end; |
Wo liegt mein Fehler?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 05.06.06 16:45
soweit ich weiß, muss es
Delphi-Quelltext 1: 2: 3: 4:
| ... RText := StringReplace(RText, '[b]', '[/b]', [rfReplaceAll]); ... | heißen 
|
|
SunnyDream 
      
Beiträge: 36
WinXP
Delphi 7 Personal
|
Verfasst: Mo 05.06.06 16:47
Jipiee!
Das war's! Danke vielmals!
|
|
|