![]() |
Suchen der Textteile
Hallo allerseits.
Irgendwie komm ich nicht weiter. Mein Programm soll unteranderem folgendes können: Ein Editfeld enthält immer eine Internet-Adresse. Falls die Adresse ein Bild ist, also z.B. "http://www.bla.de/bilder/bild123.jpg", soll das Programm im zweiten Editfeld nur die Bildnummer ausspucken (hier "123") - also ohne "http://www.bla.de/bilder/bild" und ohne ".jpg". Hab dazu eine Funktion geschrieben.
Delphi-Quellcode:
Problem dabei ist, in der Zeile mit "edt2", dass er mir "123.jpg" ausgibt. Ich will aber das ".jpg" weghaben.
function tform1.suchebild;
var Text, Suchtext, Bildnr: string; Suchindex: integer; begin Text:= edtadresse.Text; Suchtext := '.jpg'; Suchindex := Pos(Suchtext, Text); edt2.Text:=copy(text, Suchindex - 3, Suchindex - 0); // hier wird dir Bildnummer ausgegeben edt1.Text:=copy(text, 1, suchindex - 4); end; Und noch was. Kann man vielleicht den Text nur nach Ziffern oder z.B. nach "/" dursuchen lassen? Über ein Tutorial zum Thema Suche würd ich mich auch freuen. [edit=SirThornberry]Titel angepasst - Mfg, SirThornberry[/edit] |
Re: Problem beim Suchen der Textteile
erstmal muss eine Funktion einen Ergebniswert haben, wenn dus aber so lassen willst, nimm eine prozedur.
Delphi-Quellcode:
Mfg
Procedure SucheBild;
Var Text, Suchtext : String; Suchindex, Bildlaenge : Integer; begin Text:= edtadresse.Text; Suchtext := '.jpg'; Suchindex := Pos(Suchtext, Text); Bildlaenge := Length(Text)-Suchindex; edt2.Text:=Copy(Text, Suchindex - 3, Bildlaenge); //Der Dritte Parameter ist hier NICHT, BIS ZU WELCHEM, sondern WIE VIELE Zeichen er kopieren soll! edt1.Text:=Copy(Text, 1, Suchindex - 4); end; |
Re: Problem beim Suchen der Textteile
Wie wäre es mit [oh]ChangeFileExt(deinString, '');[/oh] um die Dateiendung zu entfernen? Und Wie wäre es mit
![]() |
Re: Problem beim Suchen der Textteile
Zitat:
|
Re: Problem beim Suchen der Textteile
Auch mal von mir ein Ansatz:
Delphi-Quellcode:
function TForm1.SuchBildNummer(Addr: String): String;
var i: Byte; j: Byte; begin Addr := Copy(Addr, 1, Pos('.jpg', Addr) - 1); for i := Length(Addr) downto 1 do begin if (Ord(Addr[i]) < 48) or (Ord(Addr[i]) > 57) then Break; end; Result := Copy(Addr, i + 1, Length(Addr) - i); end; procedure TForm1.Button1Click(Sender: TObject); begin Edt2.Text := SuchBildNummer(Edt1.Text); // Edt1.Text enthält die Adresse end; |
Re: Problem beim Suchen der Textteile
Zitat:
Delphi-Quellcode:
"//www.bla.de/bilder/bild123.jpg" zurück
ExtractFileName('http://www.bla.de/bilder/bild123.jpg')
Mfg |
Re: Problem beim Suchen der Textteile
Da du noch Delphi 5 hast: Ja. Bei dir schon.
|
Re: Problem beim Suchen der Textteile
Danke euch. Werde mich schlau machen und n bischen mit dem code rumspielen. Ich schreib dann wie es war. :)
Also, ich hab mich dem Code von Mazel bedient. Es funzt auch soweit. Noch ne Kleinigkeit - kann man auch so machen, dass wenn er ".jpg" findet, soll er das und das machen. Irgendwie so: if "Suchtext" found then ... |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
|
Re: Suchen der Textteile
Hi. Also ich hab das gleiche Problem wie Fussball-Robby. Hab im Web
![]() [Edit 1] Vielleicht könnte man örgentwie im AdressenFeld nach "/" suchen, diese in "\" umwandeln, Suchfunktion laufen lassen und anschließend die "\" zurück umwandeln in die "/", damit die Adresse korrekt angezeigt wird. Mal sehen, vielleicht krieg ich das so hin. [/Edit 1] |
Re: Suchen der Textteile
So könnte man es natürlich lösen. Hier mal ein Denkanstoß, den Rest müsstest du aber auch selber hinbekommen.
Delphi-Quellcode:
Oder in einer Zeile: :wink:
function FileName(Name:String):String;
begin Name:=stringreplace(Name,'/','\',[rfreplaceall]); Name:=extractfilename(Name); Name:=ChangeFileExt(Name,''); Result:=Name; end;
Delphi-Quellcode:
Mfg
function FileName(Name:String):String;
begin Result:=ChangeFileExt(extractfilename(stringreplace(Name,'/','\',[rfreplaceall])),''); end; |
Re: Suchen der Textteile
Hallo,
wenn nur der Dateiname existiert, dann sind mir die Delimiter eigentlich egal:
Delphi-Quellcode:
Freundliche Grüße
// image filename = NAMEnnn.jpg
function ExtractImageNumber(const url: string): string; var iPos: Integer; fn: TFileName; begin fn := Copy(url, Succ(LastDelimiter('/', url)), MAXINT); if SameText(ExtractFileExt(fn), '.jpg') then begin fn := ChangeFileExt(fn, ''); Result := Copy(fn, FirstDelimiter('1234567890', fn), MAXINT); end else Result := ''; end; |
Re: Suchen der Textteile
Fehler: "FirstDelimiter" ist Undefinirter Bezeichner. Was tun?
[Edit 1] In meiner DelphiHilfe (TurboDelphi win32) gibt es kein FirstDelimiter, nur LastDelimiter. |
Re: Suchen der Textteile
Hier eine einfache Version ohne MBCS Unterstützung:
Delphi-Quellcode:
function FirstDelimiter(const delimiters, s: string): Integer;
begin Result := 0; while Result < Length(s) do begin Inc(Result); if Pos(s[Result], delimiters) > 0 then Exit end; Result := 0; end; |
Re: Suchen der Textteile
Sorry, nix für Ungut aber ... Der letzte Part Ist etwas zu hoch für mich. Was macht diese Funktion? Bei deinem ersten Part kann ich alles nachvollziehen (das mit URL und .jpg). Wo ist der zusammenhang? :?
[Edit 1] Ich schau mal ![]() [Edit 2] Also, meine aktuelle Lösung ist folgende:
Delphi-Quellcode:
Primärziel erreicht. Nur so nebenbei. Kann man in einem Text NUR nach Zahlen oder NUR nach Buchstaben suchen?
function tform1.ExtractURLPath(Name: string): String;
begin Name:=stringreplace(Name,'/','\',[rfreplaceall]); Name:=extractfilename(Name); Name:=ChangeFileExt(Name,''); Result:=Name; end; function tform1.FilePath(Name:String):String; begin Name:=stringreplace(Name,'/','\',[rfreplaceall]); Name:=extractfilepath(Name); Name:=stringreplace(Name,'\','/',[rfreplaceall]); Result:=Name; end; procedure TForm1.Button8Click(Sender: TObject); begin edt2.Text := ExtractURLPath(edtadresse.Text); edt1.Text := FilePath(edtadresse.Text) end; |
Re: Suchen der Textteile
Zitat:
Einfach mit ins Projekt aufnehmen, und der erste Code von marabu müsste funktionieren |
Re: Suchen der Textteile
Ich habe es mal für Dich kommentiert:
Delphi-Quellcode:
function FirstDelimiter(const delimiters, s: string): Integer;
begin //Ergebnis mit 0 vorbelegen --> kein Treffer Result := 0; //ggf. ganzen String s durchgehen while Result < Length(s) do begin //Result wird hochgezählt und dient als Laufvariable Inc(Result); //wenn das Zeichen an der aktuellen Position des Strings s //im String Delimiters vorkommt if Pos(s[Result], delimiters) > 0 then //Funktion verlassen, Result ist ja bereits belegt Exit end; //kein Treffer gefunden, Ergebnis wieder auf 0 setzen Result := 0; end; |
Re: Suchen der Textteile
Achso-o :thumb: . Jetzt habe ich verstanden. Danke. Nichts desto trotz, weiss vielleicht jemand, ob man in einem Text NUR nach Zahlen oder NUR nach Buchstaben suchen kann?
|
Re: Suchen der Textteile
Wie meinst Du das jetzt?
|
Re: Suchen der Textteile
Naja. Angenommen mein Text besteht aus Zahlen und Buchstaben. Ist es möglich alle Zahlen in EditFeld1 und alle Buchstaben in EditFeld2 auszugeben ( - die Leerzeichen brauche ich in meinem Fall nicht). Oder den Text bis zu der letzten (gefundenen, beliebigen) Zahl auszugeben.
|
Re: Suchen der Textteile
Wo ist das Problem?
Delphi-Quellcode:
[edit] Oder mit case:
EditZahlen.Text := '';
EditBst.Text := ''; for i := 1 to Length(DeinString) do if (DeinString[i] in ['a'..'z','A'..'Z']) then EditBst.Text := EditBst.Text + DeinString[i] else if (DeinString[i] in ['0'..'9']) then EditZahlen.Text := EditZahlen.Text + DeinString[i];
Delphi-Quellcode:
for i := 1 to Length(DeinString) do
case DeinString[i] of 'a'..'z', 'A'..'Z' : EditBst.Text := EditBst.Text + DeinString[i]; '0'..'9' : EditZahlen.Text := EditZahlen.Text + DeinString[i]; end; |
Re: Suchen der Textteile
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz