Vyhledání souborů dle koncovky a jejich výčet jako seznam – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vyhledání souborů dle koncovky a jejich výčet jako seznam – Pascal – Fórum – Programujte.comVyhledání souborů dle koncovky a jejich výčet jako seznam – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
21. 8. 2009   #1
-
0
-

Moc prosím o pomoc s tímto oříškem.
Potřebuju nějaký jednoduchý postup jak nalézt ve složce kde je program uložen nalézt všechny soubory s určitou koncovkou a nechat je třeba vypsat jako seznam.
Jde mi především o to jejich vyhledání.
Děkuju předem moc za reakce a rady.

Nahlásit jako SPAM
IP: 89.190.90.–
Reklama
Reklama
Laaca0
Stálý člen
22. 8. 2009   #2
-
0
-

uses Dos;


Procedure VypisSoubor(f:SearchRec);
begin
writeln(f.name:12,#9,' (',f.size,' B)');
end;

Procedure VypisSeznamSouboru(maska:string;skryte:boolean);
{maska je treba *.exe, nebo *.*, proste klasika}
{kdyz je skryte TRUE, tak vypise i skryte soubory}
var f:SearchRec;
i:integer;
begin
if skryte then i:=ReadOnly+Archive+Hidden+SysFile
else i:=ReadOnly+Archive+SysFile;
FindFirst(maska,i,f);
while doserror=
0 do
begin
VypisSoubor(f);
FindNext(f);
end;
end;


begin
VypisSeznamSouboru('*.exe',false);
end.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
22. 8. 2009   #3
-
0
-

To Laaca : Tak,a teď mam teda jinej problém, podle tohohle skriptu je potřeba používat uses dos;
Ale já potřebuju používat uses crt; (kvůli tomu,že dos režim nepodporuje clrscr; a já potřebuju obrazovku promazávat)
Můžu to nějak zkombinovat dohromady?
A dále: Já trošku upřesním situaci. Mám adresář kde je program uložen, stejně tak i tam je nahrán soubor libovolného jména s koncovkou ngc. Ten soubor potřebuji načíst jako aktivní.
Jak toho dosáhnu? Ještě bych potřeboval trochu podrobněji vysvětlit ten řádek: "writeln(f.name:12,#9,' (',f.size,' B)');" Jak přesně funguje to f.name:12,#9.
Opět moc děkuju, tyhle věci jsou už úplně mimo mě :(

Nahlásit jako SPAM
IP: 89.190.90.–
TooM70
Newbie
22. 8. 2009   #4
-
0
-

k tomu uses, co takhle uses dos, crt; ?

Nahlásit jako SPAM
IP: 85.135.97.–
22. 8. 2009   #5
-
0
-

To TooM7 : Nj,to mě nikdy nenapadlo :D Děkuju, ale pořád mi můj hlavní cíl uniká :(

Nahlásit jako SPAM
IP: 89.190.90.–
Laaca0
Stálý člen
22. 8. 2009   #6
-
0
-

[i]writeln(f.name:12,#9,' (',f.size,' B)');[/i]

:12 znamená "roztáhni na délku 12 znaků"
#9 znamená tabulátor

Ty potřebuješ otevřít soubor a číst z něj nějaká data?
To se trošičku liší podle toho, jde-li o textový či binární soubor. V tvém případě bude pravděpodobně textový.
Následující procedura otevře soubor a vypíše na obrazovku jeho obsah.

Procedure VytiskniSoubor(s:string);

var t:text;
u:string;
begin
Assign(t,s);
Reset(t);
while not Eof(t) do begin Readln(t,u);writeln(u);end;
Close(t);
end;

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
22. 8. 2009   #7
-
0
-

To Laaca : Nene,kdepak, tamto první zadání bylo správně, já totiž neznám název toho souboru, ten se mění.
Např:
CrCo10-17-2009-07-21_112242_0101(2).ngc
CoCr12-8_153046_0101.ngc
nemá to v sobě logiku a je to pokaždý jiný, jde o textový soubor pokaždé,žádný file of něco.
Tohle je můj přepracovaný kód z vaší pomoci.

program vyhledavac;

uses dos,crt;
var k,v,b:integer;

Procedure VypisSoubor(f:SearchRec);
begin
k:=k+1;
if b=0 then begin
write(' ',k,') - ');
writeln(f.name);
end;
if ((b=1)and(k=v)) then begin
writeln; writeln(f.name); readln;
end; end;

Procedure VypisSeznamSouboru(maska:string;skryte:boolean);
var f:SearchRec; i:integer;
begin
if skryte then i:=ReadOnly+Archive+Hidden+SysFile
else i:=ReadOnly+Archive+SysFile; FindFirst(maska,i,f);
while doserror=0 do begin
VypisSoubor(f);
FindNext(f); end; end;

begin
clrscr;
k:=0; v:=0; b:=0;
VypisSeznamSouboru('*.ngc',false);
b:=1; k:=0;
writeln('Ktery program chcete kompilovat?'); readln(v);
VypisSeznamSouboru('*.ngc',false); end;
end.



Tak,tohle zjistí všechny soubory té koncovky, sám si vyberu který chci, ale už nevím jak si tu proměnou uchovat... a do souboru se mi to ukládat nechce. A nějak mi nejde udělat proměnou string a pak říci, že f.name:=tomu stringu.

Nahlásit jako SPAM
IP: 89.190.90.–
Laaca0
Stálý člen
23. 8. 2009   #8
-
0
-

Ještě než začneš psát rozsáhlé programy, tak si zvykni na to, označovat globální proměnné alespoň trojpísmenými názvy. Jinak budeš mít problémy s kolizemi názvů a budou vznikat těžko odhalitelné chyby.
Myslím, že už rozumím, co potřebuješ. Možností je několik. Buďto si nějakým způsobem zapamatuješ všechny .NGC soubory nebo si je pamatovat nemusíš, ale vyhledávání provedeš dvakrát. Druhý přístup je tady:

program vyhledavac;

uses dos,crt;

const vypis = 1;
prirazeni = 2;

pocet:integer = 0;
pracovni:integer = 0;

var
VybranySoubor:string;
pozadovany:integer;


Procedure VypisSoubor(f:SearchRec);
begin
inc(pocet); {to same jako pocet:=pocet+1}
writeln(pocet,': ',f.name);
end;


Function PriradSoubor(f:SearchRec):boolean;
begin
inc(pracovni);
if pracovni=pozadovany then
begin
VybranySoubor:=f.name;
PriradSoubor:=true;
end
else PriradSoubor:=false;
end;


Procedure ZpracujSeznamSouboru(maska:string;skryte:boolean;akce:byte);
var f:SearchRec; i:integer;
begin
if skryte then i:=ReadOnly+Archive+Hidden+SysFile
else i:=ReadOnly+Archive+SysFile; FindFirst(maska,i,f);
while doserror=0 do
begin
if akce=VYPIS then VypisSoubor(f) else
if akce=PRIRAZENI then if PriradSoubor(f) then Exit;
FindNext(f);
end;
end;


begin
clrscr;
writeln('Seznam souboru:');
ZpracujSeznamSouboru('*.ngc',false,VYPIS);
writeln;
writeln('Napis cislo souboru, ktery chcete kompilovat.');
repeat
readln(pozadovany);
if (pozadovany>pocet) or (pozadovany<1)
then writeln('Nespravne zadani, zkus to znovu')
else Break; {vyskoci ze smycky}
until false;


ZpracujSeznamSouboru('*.ngc',false,PRIRAZENI);
writeln('Vybral jste soubor c.',pozadovany,', t.j.: ',VybranySoubor);
readln;
end.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
Laaca0
Stálý člen
23. 8. 2009   #9
-
0
-

A jedna z možností, jak to udělat pomocí ukládání názvů je tady.

program vyhledavac;

uses dos,crt;


const
pocet:integer = 0;
max_souboru = 100;


type Tpolozka = record
nazev:string;
cislo:integer;
end;

var
VybranySoubor:string;
pozadovany:integer;
polozka:array[1..MAX_SOUBORU] of TPolozka;


Procedure VypisSoubor(f:SearchRec);
begin
inc(pocet); {to same jako pocet:=pocet+1}
writeln(pocet,': ',f.name);
polozka[pocet].nazev:=f.name;
polozka[pocet].cislo:=pocet;
end;


Procedure ZpracujSeznamSouboru(maska:string;skryte:boolean);
var f:SearchRec; i:integer;
begin
if skryte then i:=ReadOnly+Archive+Hidden+SysFile
else i:=ReadOnly+Archive+SysFile; FindFirst(maska,i,f);
while doserror=0 do
begin
if pocet=max_souboru then
begin
writeln('Prilis mnoho souboru - zobrazuji jen prvnich ',max_souboru);
Exit;
end;
VypisSoubor(f);
FindNext(f);
end;
end;


begin
clrscr;
writeln('Seznam souboru:');
ZpracujSeznamSouboru('*.ngc',false);
writeln;
writeln('Napis cislo souboru, ktery chcete kompilovat.');
repeat
readln(pozadovany);
if (pozadovany>pocet) or (pozadovany<1)
then writeln('Nespravne zadani, zkus to znovu')
else Break; {vyskoci ze smycky}
until false;

writeln('Vybral jste soubor c.',pozadovany,', t.j.: ',polozka[pozadovany].nazev);
readln;
end.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
23. 8. 2009   #10
-
0
-

Díky moc za všechno :)
Teď už to dohromady dám v pohodě.

Nahlásit jako SPAM
IP: 89.190.90.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý