| Autor |
Beitrag |
Rattergott
      
Beiträge: 19
Win 2k
D7 Ent
|
Verfasst: Di 17.05.05 14:28
Hallo leutes,
ich habe ein Problem.
nehmen wir an ich hätte einen string s mit dem inhalt: xyz http://google.de qvc ard http://web.de php
aus diesem string möchte ich jetzt die webadressen, die unbekannt sind abba alle mit http:// anfangen herausfiltern.
wie mache ich das?
MfG
Ratter
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Di 17.05.05 14:41
Titel: hmm,
Mach einfach ne Whileschleifen.
zunächst suchst du nach POS('http://',string) und POS(' ',string) was dazwischen steht das ist eine URL, die liest du aus und danach löschst du alles aus string bis zur Position des Leerzeichens.
Das machst du solange bis POS('http://',string) nichts mehr findet bzw. string einfach leer ist.
_________________ mfg. Joel
|
|
Rattergott 
      
Beiträge: 19
Win 2k
D7 Ent
|
Verfasst: Di 17.05.05 14:50
das problem ist ich hab keine ahnugn von delphi, kannst du mir da mit nem beispiel programm helfen?
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Di 17.05.05 15:08
Titel: hmm,
da gibbet kein Beispielprogramm, da gibbet nur ne Lösung und dafür ist das Board nicht da bzw. meine Zeit zu begrenzt. Ein wenig Eigeninitiative sollte schon vorhanden sein.
_________________ mfg. Joel
|
|
Rattergott 
      
Beiträge: 19
Win 2k
D7 Ent
|
Verfasst: Di 17.05.05 18:28
kann mri nciht irgendwer helfen? BITTTE
|
|
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: Di 17.05.05 18:34
Is das Übung? Wenn ja, dann mustt du's schon selbver schreiben, sonst bringt das nix.
Oder is es für n Programm? Muss es unbedingt so eien Formatierung sein. Es gibt da viel bessere Möglichkeiten, n paar INfos mehr wären nicht schlecht.
|
|
feivel3333
      
Beiträge: 190
W7
Delphi XE prof
|
Verfasst: Di 17.05.05 20:52
Titel: Web-Adressen herausfiltern
Hi,
wo auch immer du diesen seltsamen String herhast - an Deiner Stelle würde ich das folgendermaßen lösen:
Baue dir ein Array auf, das aus Strings besteht. Aber von nicht fest definierter Größe.
z.B. asAdressen : array of string;
Nun musst du eine Schleife programmieren, die die Leertasten findet und dort den String zerschneiden.
solange eine Leertaste gefunden wird
d.h. pos( ' ', csAdressenliste ) > 0
führe folgendes durch:
Vergrößere das Array um ein Element,
schnibbel vorn von csAdressenliste ein Element bis zur Leertaste ab
füge die abgeschnibbelte Adresse in das Array ein.
Das letzte Element von csAdressenliste packst du einfach zusätzlich an das Array hinten an.
Warum, das wirst du schon noch merken.
Nun gehe einfach das Array von hinten nach vorn durch und prüfe, ob das jeweilige Element mit http anfängt. Wenn nein, lösche das Element.
Fertig ist die Liste.
Wenn du mir verrätst, wo die Adressenliste herkommt, vielleicht fällt mir dann was Leichteres ein. Ist sie wirklich so seltsam aufgebaut und beinhaltet Word-Mischmasch?
Gruß, AS
|
|
J.Borchert
      
Beiträge: 150
WIN10
XE2 Professional
|
Verfasst: Di 17.05.05 21:08
Das ist so etwas was feivel3333 meinte:
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:
| function StrX(Trenner:Char; s:string; x:integer):string; var a :array of string; i,j :integer; t :string; begin t:=Trim(s); for i:=1 to length(t) do if t[i]='"' then begin t[i]:=Trenner; for j:=i+1 to length(t) do begin if t[j]=Trenner then t[j]:='‡'; if t[j]='"' then begin t[j]:=Trenner; break; end; end; end; setLength(a,1); while length(a) <= x do begin for i:=1 to length(t) do if t[i]<>Trenner then a[length(a)-1]:=a[length(a)-1]+t[i] else if t[i-1]<>trenner then setLength(a,length(a)+1); if i>length(t) then break; end; if x>length(a) then result:='' else result:=StringReplace( a[x-1], '‡', Trenner, [rfReplaceAll]);
end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| ... var i:integer; schtringliste:TStringList; for i:=1 to MaxWorteInZeile do if uppercase(StrX(' ',Zeile,i))='HTTP://' then schtringliste.add(StrX(' ',Zeile,i)); ... |
MaxWorteInZeile muß Du natürlich als Zahl angeben oder ermitteln
Wenn einer weiß, wie's besser und schneller geht, bitte posten...
mfG Jürgen
_________________ Wer immer macht was er schon kann, bleibt immer das, was er schon ist. "H.Ford"
|
|
feivel3333
      
Beiträge: 190
W7
Delphi XE prof
|
Verfasst: Di 17.05.05 21:48
Also, es ist fertig:
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: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69:
| procedure TMainForm.BitBtn6Click(Sender: TObject);
var csAdressen : string; csTeilString : string; niPos : integer; niLang : integer; asAdressen : array of string;
procedure ADel( niPosition : integer );
var niI : integer; niLength : integer;
begin niLength := length( asAdressen )-1; if niLength < niPosition then exit;
if niPosition = niLength then begin SetLength( asAdressen, niLength ); exit; end;
for niI := niPosition to niLength-1 do begin asAdressen[ niI ] := asAdressen[ niI+1 ]; Application.ProcessMessages; end; SetLength( asAdressen, niLength ); end;
begin csAdressen := 'xyz http://google.de qvc ard http://web.de php'; csAdressen := trim( csAdressen ) + ' ';
while true do begin Application.ProcessMessages; niPos := pos( ' ', csAdressen ); if niPos = 0 then break;
if niPos = length( csAdressen ) then begin niLang := length( asAdressen ); SetLength( asAdressen, niLang+1 ); asAdressen[ niLang ] := trim( csAdressen ); break; end;
csTeilString := copy( csAdressen, 1, niPos-1 ); niLang := length( asAdressen ); SetLength( asAdressen, niLang+1 ); asAdressen[ niLang ] := csTeilString;
csAdressen := copy( csAdressen, niPos+1, length( csAdressen ) - niPos ); end;
niLang := length( asAdressen )-1;
for niPos := niLang downto 0 do begin Application.ProcessMessages; if pos( 'HTTP://', AnsiUpperCase( asAdressen[ niPos ] ) ) = 0 then adel( niPos ); end; end; |
Ich habe den ganzen Spaß auf einem ButtonClick ausführen lassen und festgestellt, dass es funktioniert.
Hoffentlich hilft es dir weiter.
Gruß, Feivel
|
|
Rattergott 
      
Beiträge: 19
Win 2k
D7 Ent
|
Verfasst: Mi 18.05.05 00:07
die frage ist jetzt:
wie ich sehe nimmst du alle adressen in asAdressen auf.
wie gebe ich den ein array in einem memofeld aus?
|
|
Benutzername
      
Beiträge: 210
Win XP Pro
Delphi 7 PE, D2005 Prof. SSL
|
Verfasst: Mi 18.05.05 00:58
Etwa so:
Delphi-Quelltext 1: 2:
| for i := 0 to length(asAdressen)-1 do Memo1.Lines.Add(asAdressen[i]); |
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mi 18.05.05 01:35
tja. jetzt macht er "markieren, STRG+C, STRG+V, F9" und sagt "juhu! ich hab ein Programm geschrieben!"... soll heißen: wo is der Lerneffekt? ausserdem hätt ich das mit ner stringlist, CommaText und StringReplace gemacht. da muss man sich die explode funktion nich mal selber schreiben.
Delphi-Quelltext 1: 2: 3: 4: 5:
| with TStringList.Create do begin CommaText:=StringReplace(Edit1.Text, ' ', ',' , [rfReplaceAll]);; Memo1.Text:=Text; end; |
getestet.
Und last but not least soll man die Suche benutzen. Es gibt schätzungsweise 10 Themen die sich mit Explode funktionen beschäftigen, da wett ich (fast  ) drauf.
Aber gut, Hier is das Thema ja wohl eindeutig durch. ^^
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Rattergott 
      
Beiträge: 19
Win 2k
D7 Ent
|
Verfasst: Do 19.05.05 00:01
also nur so zur info, der bereich den ich hierraus übernommen habe, ist kenntlich gemacht und ich klaue nicht sondern weise auf die quelle hin.
und danke. hat geklappt!
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Do 19.05.05 00:45
neiiiiiiiiiiiiiiiiiin so hab ichs nicht gemeint  ich meinte: du hast doch dabei nix gelernt, weil du nix weiter tun musstest, als kopieren! Ich will dir doch nix vorwerfen  Das DF ist doch dazu da, um Hilfe zu bekommen, das hat nix mit klauen zu tun!
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Rattergott 
      
Beiträge: 19
Win 2k
D7 Ent
|
Verfasst: Do 19.05.05 12:24
doch ich blicke zwar durch das programm oben nciht durch ........ abbbba ich habe gelernt, wie man das mit dem memo feld macht!
|
|
feivel3333
      
Beiträge: 190
W7
Delphi XE prof
|
Verfasst: Do 19.05.05 13:07
Titel: Programm verstehen
Hi,
wenn du das Programm oben nicht verstehst, das jetzt aber auf deinem PC korrekt läuft, dann würde ich, um es zu begreifen, mit dem Debugger durchwandern und das Array genau untersuchen. Du kannst es dir ja auch in die Liste der zu beobachtenden Elemente legen und bei jedem Schritt mit F7 bzw. F8 begutachten.
Hilft für das Verständnis bestimmt weiter. Und da dort auch die Variablentypen eindeutig zu erkennen sind, dürfte es nicht allzu schwierig sein.
Gruß, Feivel
|
|