[delphi] string-ftp-listing verwerken

Pagina: 1
Acties:

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ik heb een ftp component, en ik had gehoopt dat ik na een list een stringlist terug kreeg. Maar jammer genoeg is dat niet zo, ik kijrg bv deze string terug:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-rw-r--r--   1 thijs    thijs        6 Oct 31 21:46 blaat.txt
drwxrwxrwx   2 thijs    thijs     4096 Sep 16 22:20 cgi-bin
-rwxrwxrwx   1 thijs    thijs      115 Sep 20 18:45 config.inc.php
-rw-r--r--   1 thijs    thijs      258 Sep 20 18:45 db.php
-rw-r--r--   1 thijs    thijs      177 Sep 20 18:45 email.php
-rwxrwxrwx   1 root     root         53 Sep 20 18:45 footer.inc.php
drwxrwxrwx   4 thijs    thijs     4096 Oct  5 18:07 fotos
-rwxrwxrwx   1 root     root        340 Sep 20 18:45 header.inc.php
-rwxrwxrwx   1 root     root        170 Sep 20 18:45 index.php
-rw-r--r--   1 thijs    thijs      720 Sep 20 18:45 insert.php
-rw-r--r--   1 thijs    thijs       16 Sep 20 18:45 inside.php
-rw-r--r--   1 thijs    thijs      229 Sep 20 18:45 login.php
-rw-r--r--   1 thijs    thijs      471 Sep 20 18:45 loginres.php
-rwxrwxrwx   1 thijs    thijs      324 Sep 20 18:45 mail.php
drwxrwxrwx   9 1134     1134       4096 Sep 16 22:21 manual
drwxr-xr-x   2 thijs    thijs     4096 Nov  2 22:17 mp3
drwxrwxrwx   2 thijs    thijs     4096 Sep 16 22:21 plaatjuhs
drwxrwxrwx   2 thijs    thijs     4096 Sep 16 22:21 pubfillers
drwxrwxrwx   3 thijs    thijs     4096 Sep 16 22:21 skool
drwxrwxrwx   5 thijs    thijs     4096 Sep 16 22:22 source
drwxrwxrwx   2 thijs    thijs     4096 Sep 16 22:22 sploits
-rw-r--r--   1 thijs    thijs        6 Nov  2 18:23 test.txt
drwxr-xr-x   4 thijs    thijs     4096 Oct 31 22:20 tools

nu wil ik dus ff een functie schrijven die elke regel opnieuw met een of ander loopje terugtelt en dan het laatste woord, tot de spatie dus(de dirnaam) in een stringlist zet. Maar dit wil nog niet echt lukken. wie wil me aub een stukkie op weg helpen?

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Spring eens creatief om met strings. Delphi moet vast wel een splitfunctie hebben en daarnaast kun je met de Copy-functie de info er ook wel uitkrijgen. Zie ook de Fine Manual... ;)

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Misschien zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function GetFilenames(s: string): TStringList;
// s: resultaat van LIST
// result: Stringlist met bestandsnamen
var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Text := s;
  for i := 0 to sl.Count - 1 do
    sl[i] := Copy(sl[i], 60, 255);
  result := sl;
end;

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op zondag 04 november 2001 17:59 schreef JapJap het volgende:
Misschien zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
function GetFilenames(s: string): TStringList;
// s: resultaat van LIST
// result: Stringlist met bestandsnamen
var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Text := s;
  for i := 0 to sl.Count - 1 do
    sl[i] := Copy(sl[i], 60, 255);
  result := sl;
end;
sl.Text := s;
dit stukje snap ik niet, een stringlist is toch net als eer array dus het moet toch sl[?].text zijn??

ik moet het aantal regels van die string s hebben..

sl[i] := Copy(sl[i], 60, 255

bedoel je met die 60 en 255 ascii codes?

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
THIJZEL:
sl.Text := s;
dit stukje snap ik niet, een stringlist is toch net als eer array dus het moet toch sl[?].text zijn??
De string s bestaat uit meerdere regels. De stringlist breekt s in stukjes en zet elke regel in een aparte string. sl.Count is het aantal strings in de stringlist.
sl[i] := Copy(sl[i], 60, 255)
60 is (ongeveer ;)) de plaats van de bestandsnaam in de regel, 255 is het aantal karakters dat gekopieerd moet worden. Kijk ook eens naar de help van Copy.

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ik zxat zelf te denken :
een loop die zoekt naar een crlft dan start er een andere loop die teruguittelt tot ie een spatie vind en dan dus alles wat ie daartussen vind in een stringlist zet.

ik wilde dat met spaties doen dus iets van:


woord,input:string
//hier die loop
if not input[i] = #22 then//ascii code van een spatie woord:= inputt[i]+woord

else
//terug naar de main loop die naar crlft kijkt

Verwijderd

nee, de bestandsnaam begint op een vaste positie, dus ik zou copy(s,60,length(s)-60) (oid) doen.

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op zondag 04 november 2001 19:38 schreef deur het volgende:
nee, de bestandsnaam begint op een vaste positie, dus ik zou copy(s,60,length(s)-60) (oid) doen.
klopt ik heb et ff getest, ik d8 eerst van niet.

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
ok ik heb em werkend!! bedankt!!

  • Bigs
  • Registratie: Mei 2000
  • Niet online
Verschilt de layout van die lijst niet per server? Die je hier laat zien is bijv. van een Unix L8 type server (o.a. dus van Linux en FreeBSD, maar ook WarFTPD doet het zo), maar een IIS server geeft volgens mij een listing terug in de vorm van het dir commando van dos.

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op maandag 05 november 2001 11:26 schreef Bigs het volgende:
Verschilt de layout van die lijst niet per server? Die je hier laat zien is bijv. van een Unix L8 type server (o.a. dus van Linux en FreeBSD, maar ook WarFTPD doet het zo), maar een IIS server geeft volgens mij een listing terug in de vorm van het dir commando van dos.
oeh nmog niet getest alleen nog maar op een proftpd server

  • wizl
  • Registratie: Maart 2001
  • Laatst online: 27-02-2023

wizl

hmmz

Kun je niet gewoon het FastNET component in delphi gebruiken? Je zet ParseList op True, en je krijgt in de property FTPDirectoryList gewoon de velden Name, Size, Attribute en DateModified terug. Iesse siempel :P

Verwijderd

Kwou net zeggen,
er zijn toch standaard componentjes voor?
Very ez, nix geen gezeur. Natuurlijk als je een nieuwe versie installeert heb je wel gezeur met al die componenten opnieuw installeren enzo, maarja...

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
Op dinsdag 06 november 2001 11:42 schreef wizl het volgende:
Kun je niet gewoon het FastNET component in delphi gebruiken? Je zet ParseList op True, en je krijgt in de property FTPDirectoryList gewoon de velden Name, Size, Attribute en DateModified terug. Iesse siempel :P
die is kut, bij het 2e list commando krijg ik geen output en blijft me programma hangen..

Verwijderd

FastNet 4.1 is idd nogal buggy (vooral die FTP LIST bug kom je veel tegen), maar 5.6.4 en 6.0.1 zijn wel een stuk stabieler.
Maar helaas niet gratis te upgraden en nog steeds niet lekker in te zetten in een threaded omgeving (aan de serverkant vooral), en dan zijn de Indy componenten een stuk interessanter. Gratis en akelig stabiel. 't Is alleen even wennen...
Pagina: 1