Předmět Autor Datum
Akú inšpiráciu potrebuješ ? Vieš vôbec aspoň trochu pracovať s text.súbormi - otvoriť, prečítať riad…
pme 14.10.2009 21:04
pme
¨ja su zacatecnik a docela bych to potreboval tak aspon nejak strucne,prosím
Syny09 14.10.2009 21:12
Syny09
Napr. takto: Memo1.Lines.LoadFromFile(OpenDialog1.Filename);
pme 14.10.2009 21:16
pme
Ok dikec mam todle: procedure TForm1.Button2Click(Sender: TObject); var s,sub1,subs:string; //sub1…
Syny09 15.10.2009 16:54
Syny09
Navkladani zdrojaku pouzivej CODE. Mas tam i primo CODE pro pascal, takze ti to krasne zvyrazni synt…
Jan Fiala 15.10.2009 17:37
Jan Fiala
procedure TForm1.Button2Click(Sender: TObject); var s,sub1,subs:string; //sub1 - řídící znaky, subs…
Syny09 15.10.2009 18:02
Syny09
Jak ma vypadat kod - o nejakem odsazovani jsi slysel? Nedivim se, ze se v tom nevyznas. Access viol…
Jan Fiala 15.10.2009 18:48
Jan Fiala
Nemám chuť kontrolovať Tvoj výtvor ale... Asi by som na to išiel trošku jednoduchšie ??? :-) 1.) N… poslední
pme 15.10.2009 19:38
pme

Akú inšpiráciu potrebuješ ?
Vieš vôbec aspoň trochu pracovať s text.súbormi - otvoriť, prečítať riadok....
Vieš ako pracuje Memo ??? Vieš ako získať meno súboru z OpenDialogu ?

Snáď nechceš aby Ti tu niekto napísal celý program ???

Ok dikec mam todle:

procedure TForm1.Button2Click(Sender: TObject);
var s,sub1,subs:string; //sub1 - řídící znaky, subs - nalezené řetězce
I,Y,Z:integer;
begin
//je třeba hledat text href a src
while eof(f)<>true do
begin
readln(f, s);
for I:=1 to length(s) do
begin
if I<(length(s)-4) then
if s[I]+s[I+1]+s[I+2]+s[I+3] = 'href' then
begin
Y:=0;
//determinování řetězce odkazu
if s[I+Y+5]='"' then
repeat
subs:=subs+s[I+Y+5+1];
sub1:=s[I+Y+5+2];
inc(Y);
until sub1='"';

Memo1.Lines.Add(subs);
end;
//subs:='';
//sub1:='';

//pos('/',subs);
//determinování názvu obrázku -
if s[I]+s[I+1]+s[I+2] = 'src' then
begin
Y:=0;
//determinování řetězce odkazu
if s[I+Y+5]='"' then
repeat
subs:=subs+s[I+Y+5+1];
sub1:=s[I+Y+5+2];
inc(Y);
until sub1='"';

//determinování názvu odkazu
repeat
inc(Y);
until s[I+Y+5+1]='>';(*sub1='"';*)
//inc(Y);
repeat
inc(Y);
if (I+Y+5)>=Length(s) then break;
subs:=subs+s[I+Y+5+1];
//inc(Y);
until s[I+Y+5+1]='<';
delete(subs,(length(subs)),1);
Memo1.Lines.Add(subs);

end;
if s[I]+s[I+1]+s[I+2] = 'src' then
begin
Y:=0;
//determinování řetězce odkazu
if s[I+Y+4]='"' then
repeat
subs:=subs+s[I+Y+4+1];
sub1:=s[I+Y+4+2];
inc(Y);
until sub1='"';
Memo1.Lines.Add(subs);
subs:='';
sub1:='';
end;
end;
end;
end;

end.

zadaní:

Program přečte stránku HTML (soubor *.html) a vypíše všechny odkazy a cesty a jména obrázků, které stránka obsahuje tj. obsahy tagů <a>, <img>. Soubor *.html otevřít pomocí opendialogu, výsledek do textového souboru nebo mema.

pls mohl byste to nekdo trchu zcekovat a poupravit, program sice chodi ale nejak podivne, nevim co s tim udelat,prosim moc diky

Navkladani zdrojaku pouzivej CODE. Mas tam i primo CODE pro pascal, takze ti to krasne zvyrazni syntaxi. Takto prirazene to cist jde hodne blbe.

Pises, ze program funguje podivne. Zkus se vyjadrit presne, popsat co a v jakem pripade funguje podivne a pak se da mluvit o nejakem kontrolovani.

procedure TForm1.Button2Click(Sender: TObject);
var s,sub1,subs:string; //sub1 - řídící znaky, subs - nalezené řetězce
I,Y,Z:integer;
begin
//je třeba hledat text href a src
while eof(f)<>true do
begin
readln(f, s);
for I:=1 to length(s) do
begin
if I<(length(s)-4) then
if s[I]+s[I+1]+s[I+2]+s[I+3] = 'href' then
begin
Y:=0;
//determinování řetězce odkazu
if s[I+Y+5]='"' then
repeat
subs:=subs+s[I+Y+5+1];
sub1:=s[I+Y+5+2];
inc(Y);
until sub1='"';

Memo1.Lines.Add(subs);
end;
//subs:='';
//sub1:='';

//pos('/',subs);
//determinování názvu obrázku -
if s[I]+s[I+1]+s[I+2] = 'src' then
begin
Y:=0;
//determinování řetězce odkazu
if s[I+Y+5]='"' then
repeat
subs:=subs+s[I+Y+5+1];
sub1:=s[I+Y+5+2];
inc(Y);
until sub1='"';

//determinování názvu odkazu
repeat
inc(Y);
until s[I+Y+5+1]='>';(*sub1='"';*)
//inc(Y);
repeat
inc(Y);
if (I+Y+5)>=Length(s) then break;
subs:=subs+s[I+Y+5+1];
//inc(Y);
until s[I+Y+5+1]='<';
delete(subs,(length(subs)),1);
Memo1.Lines.Add(subs);

end;
if s[I]+s[I+1]+s[I+2] = 'src' then
begin
Y:=0;
//determinování řetězce odkazu
if s[I+Y+4]='"' then
repeat
subs:=subs+s[I+Y+4+1];
sub1:=s[I+Y+4+2];
inc(Y);
until sub1='"';
Memo1.Lines.Add(subs);
subs:='';
sub1:='';
end;
end;
end;
end;

end.

tak ted uz mi to nefunguje skoro vubec pac sem tam neco prepsal a ja blbec to ulozil pise mi to Acces Violation at address 004514DF in module 'Project1.exe' Read of address 00000000

Jak ma vypadat kod - o nejakem odsazovani jsi slysel? Nedivim se, ze se v tom nevyznas.

Access violation ti to pise, protoze pristupujes k nejakemu objektu, ktery neexistuje.
V Delphi existuje debuger, breakpointy, trasovani kodu...
Protoze vidime pouze kousek kodu, neni mozne rict, kde jsi co provedl.

Priklad naformátovaného kódu:

//determinování názvu obrázku -
if s[I]+s[I+1]+s[I+2] = 'src' then
begin
  Y:=0;
  //determinování řetězce odkazu
  if s[I+Y+5]='"' then
    repeat
      subs:=subs+s[I+Y+5+1];
      sub1:=s[I+Y+5+2];
      inc(Y);
    until sub1='"';
    ...
end;

K access violation muze dochaet take v pripade, kdy pristupujes k indexu retezce, ktery neexistuje.

Zkus nahradit nektere konstrukce:

if s[I]+s[I+1]+s[I+2] = 'src' then

nahrad za:

if AnsiSameText(Copy(s, i, 3), 'src') then

Tim budes mit zajisteno, ze nebude dochazet k cybnemu indexovani retezce a soucasne zajistis i velikost tagu. nebudes muset osetrovat 'src', 'Src', 'SRC' atd.

Nemám chuť kontrolovať Tvoj výtvor ale...
Asi by som na to išiel trošku jednoduchšie ???

:-)

1.) Na prázdny form si daj komponenty: WebBrowser (záložka internet), 2 tlačítka a ListBox.
2.) do uses doplň mshtml

uses
  MSHTML;

// Najprv treba otvoriť stránku
procedure TForm1.Button1Click(Sender: TObject);
begin
  Webbrowser1.Navigate('http://pc.poradna.net'); //alebo konkrétny súbor buď na webe alebo v PC...
end;

// Potom treba vykonať nasledujúci kód:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Word;
  ImageHref, ImageName: string;
  Document: IHtmlDocument2;
begin
  for i := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do
  begin
    Document := WebBrowser1.Document as IHtmlDocument2;
    ImageHref := (Document.Images.Item(i, 0) as IHTMLImgElement).Href;
    ImageName := (Document.Images.Item(i, 0) as IHTMLImgElement).nameprop;
    ListBox1.Items.Add(Format('%s;    Meno súboru: %s', [ImageHref, ImageName]));
  end;
end; 

Zpět do poradny Odpovědět na původní otázku Nahoru