Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi routine aendern(speichern in listbox>speichern in hashtable) (https://www.delphipraxis.net/135418-routine-aendern-speichern-listbox-speichern-hashtable.html)

nimmersattXD 10. Jun 2009 16:38

Re: routine aendern(speichern in listbox>speichern in has
 
ah ok, das wars :oops:

kann ich bei den hashtables eigentlich auch zwei spalten machen? also eigentlich drei :) mit key, path und dem namen der datei ?? und wenn ja wieder mach ich das ?

himitsu 10. Jun 2009 16:55

Re: routine aendern(speichern in listbox>speichern in has
 
du kannst ja an Data jedes Eintrages irgendwas anhängen ... also auch ein Record oder ein Object, mit den zusätzlichen Werten.

Aber wenn du wirklich nur den Dateinamen (ohne Pfad) als Key nimmst, dann mußt du wirklich noch aufpassen, daß/ob da kein Dateiname mehrfach vorkommt, da ja ein Key eindeutig sein muß.

nat 10. Jun 2009 17:44

Re: routine aendern(speichern in listbox>speichern in has
 
Zitat:

Zitat von himitsu
Aber wenn du wirklich nur den Dateinamen (ohne Pfad) als Key nimmst, dann mußt du wirklich noch aufpassen, daß/ob da kein Dateiname mehrfach vorkommt, da ja ein Key eindeutig sein muß.

das hatte ich mir auch schon überlegt (schon bei einem anderen thread des autors).
wer sagt denn, dass logo.jpg in ordner-A gleich ist mit logo.jpg in ordner-B?
(in bezug auf die aufgabenstellung: doppelte dateien finden)

nimmersattXD 10. Jun 2009 19:18

Re: routine aendern(speichern in listbox>speichern in has
 
mmh also is hashtables doch nicht sone gute idee oder wie? oder ich lass die pfade einfach weg, ich denk mal wenn das programm fertig ist, will mein chef eh noch eine routine, die die bilder löscht, die nicht gebraucht werden, dann ich die ja nochmal fix suchen ...

himitsu 10. Jun 2009 19:30

Re: routine aendern(speichern in listbox>speichern in has
 
du darfst die Bilder halt nicht am Namen unterscheiden, sondern solltest besser den Inhalt vergleichen.

zum nochmal schnell suchen:
wenn es mehrere Dateien mit dem selben Namen gibt, wie willst du dann entscheiden, welche gelöscht werden muß, wenn du den Pfad nicht mehr hast?

[add]
wenn es mehrere Einträge mit dem selben Namen/Key gibt, dann ist die hier derzeit verwendete Hashlist ungeeignet, da sie keine doppelten Keys erlaubt.

nimmersattXD 11. Jun 2009 09:16

Re: routine aendern(speichern in listbox>speichern in has
 
mmh vllt habt ihr mein programm nicht verstanden, selbst wenn das bild mehrmals als datei vorkommt, kann es trotzdem sein das es nicht in den htmls is, also dann auch nich in der andern tabelle, wenn das der fall kann es ja geloescht werden, und dann ist es ja nich mehr so schwer nochmal GetFilesInDirectory aufzurufen und damit dann alle zu loeschen!

was passiert eigentlich in der hashtabelle wenn was gespeichert werden soll, was schon drin is? wird das dann einfach verworfen?

eigentlich brauch ich jetzt nur noch eine zaehlschleife machen, die jedes objekt der hashpic mit den objekten der andern hash tabele zu vergleichen! wie kommt man denn an die einzelnen objekte einer solchen tabelle? haben die einen index, den ich durchgehen kann? ok also mit .first komm ich ja an das erste un mit next an die naechsten elemente, aber wie komme ich dann nur an den inhalt vom key, zum speichern in einer stringvariable??

nimmersattXD 11. Jun 2009 12:57

Re: routine aendern(speichern in listbox>speichern in has
 
hat denn keiner eine idee?

nat 11. Jun 2009 15:15

Re: routine aendern(speichern in listbox>speichern in has
 
was genau ist denn jetzt noch dein problem? ich blicke nicht mehr ganz durch ;)
formuliere mal ein paar konkrete probleme, dann versuche ich dir zu antworten 8)

nimmersattXD 11. Jun 2009 15:29

Re: routine aendern(speichern in listbox>speichern in has
 
also hier erstmal mein quelltext, bei dem ich hilfe brauche:


Delphi-Quellcode:

procedure TForm1.BtnSearchSitClick(Sender: TObject);
var direct,filename:string;
    page:TStringList;
    i,idx:integer;
    re:TRegExpr;
    such:Boolean;
    hashsit,hashpic:TStringDictionary;
begin
direct:=Edpaths.Text;
hashsit:=TStringDictionary.Create;
hashpic:=TStringDictionary.Create;

GetFilesInDirectory1(direct,'*.html',hashsit,true,true);
GetFilesInDirectory1(direct,'*.htmlm',hashsit,true,false);
GetFilesInDirectory1(direct,'*.jsp',hashsit,true,false);

LiBoSit.Items.Add('das geht auch :D');


//routine zum suchen der Url in den htmls

page:=TStringList.Create;
re:=TRegExpr.Create;

   try
   for i:=0 to hashsit.TotalCount-1 do
     begin
     page.LoadFromFile(hashsit.first);
     re.ModifierI:=true;
     re.ModifierG:=true;
     re.ModifierM:=false;
     re.ModifierS:=false;
     re.ModifierX:=false;
     re.Expression:='<img .*?src=[\\]??"([^"]*?)[\\]??"';
     such:=re.Exec(page.Text);
     if such then
       repeat
       idx:=LastPos('/',re.match[1]);
         if idx > 0 then filename:=copy(re.Match[1],idx+1,length(re.Match[1]))
           else filename:=re.match[1];
           filename:=ReplaceHex(filename);

       if not (filename = '') then hashpic.Add(filename,nil);

       until not re.ExecNext;
       end;
   finally
     LiBoPicsFoundInPages.Sorted:=true;
     page.Free;
     re.Free;
   end;


end;
wundert euch nicht, manche variablen hab ich noch nicht geloescht, nach dem umstellen von listbox auf hashtabellen!

so ich hab jetzt die pfade von den htmls in hashsit gespeichert, das scheint auch zu funktionieren. jetzt hab ich halt das problem dass ich nicht weiss wie ich an die keys in der tabelle komme, zb in der zeile:
page.LoadFromFile(hashsit.first);
das inkompatible typen, is ja klar, aber wie mach ich denn dass die zaehlschleife durch jede datei geht und nach der regex sucht? also wie komm ich an den key ran!

nat 11. Jun 2009 16:43

Re: routine aendern(speichern in listbox>speichern in has
 
also die TStringDictionary-Klasse gehst du so durch:
Delphi-Quellcode:
var
  Key: String;
  dummy: Pointer;
begin
  Dict.First;
  while Dict.Next(Key, dummy) do
  begin
    //mach was mit Key
  end;
ich weiß nich mehr genau wie du dadrin speicherst, aber ich denke
Key ist dann dein dateiname. und den daten pointer brauchst du ja nicht.

aber deine html-dateien (bzw, jsp usw.) brauchst du doch nicht in ner
hash-table speichern. das macht doch auch gar keinen sinn, denn du
möchtest doch JEDE html-datei nach images parsen, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz