Autor Beitrag
Rattergott
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win 2k
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win 2k
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win 2k
D7 Ent
BeitragVerfasst: Di 17.05.05 18:28 
kann mri nciht irgendwer helfen? BITTTE
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 150

WIN10
XE2 Professional
BeitragVerfasst: Di 17.05.05 21:08 
Das ist so etwas was feivel3333 meinte:

ausblenden volle Höhe Delphi-Quelltext
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//Sucht X-ten String in s
var a   :array of string
    i,j :integer; 
    t   :string;
begin t:=Trim(s);
        for i:=1 to length(t) do // innerhalb von " " = ‡
         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]);

(* StrX(' ',s,6) ergibt 'Tag 7'
   StrX(' ',s,2) ergibt '34'

   s = 12.23 34 21.2 22.34 23434,45 "Tag 7" 234.9878 H
*)

end;


ausblenden 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 :twisted:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: Di 17.05.05 21:48 
Also, es ist fertig:

ausblenden volle Höhe Delphi-Quelltext
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
          // Letztes Element abschneiden:
          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
         // Endstück erreicht:
         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;

   // Bereinigung von asAdressen:
   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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win 2k
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 210

Win XP Pro
Delphi 7 PE, D2005 Prof. SSL
BeitragVerfasst: Mi 18.05.05 00:58 
Etwa so:
ausblenden Delphi-Quelltext
1:
2:
for i := 0 to length(asAdressen)-1 do
 Memo1.Lines.Add(asAdressen[i]);
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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.
ausblenden 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 :wink:) drauf.

Aber gut, Hier is das Thema ja wohl eindeutig durch. ^^

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Rattergott Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win 2k
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 19.05.05 00:45 
neiiiiiiiiiiiiiiiiiin so hab ichs nicht gemeint :shock: ich meinte: du hast doch dabei nix gelernt, weil du nix weiter tun musstest, als kopieren! Ich will dir doch nix vorwerfen :shock: Das DF ist doch dazu da, um Hilfe zu bekommen, das hat nix mit klauen zu tun!

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Rattergott Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win 2k
D7 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 190

W7
Delphi XE prof
BeitragVerfasst: 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