Avatar billede Ninjan Nybegynder
08. oktober 2013 - 15:57 Der er 9 kommentarer og
1 løsning

Søgning gennem mapper og filer i XAL

Directory("","P:\\*.*","XAL=VisFiler",8,0,0) viser de filer der findes i P:\.

Men hvordan får jeg søgt dybere igennem de evt. underliggende mapper ?
Avatar billede ebea Ekspert
08. oktober 2013 - 16:54 #1
I "gamle dage", brugte man kommandoen /s hvis man ville søge i subdirectories.

f.eks. P:\*.txt /s
finder alle filer af typen .txt i drevet P:, og søger også i alle undermapper.
Avatar billede jjam Juniormester
08. oktober 2013 - 18:05 #2
En rekursiv kørsel kan i XAL laves i en rapport, linjekørsel der kalder sig selv. Udfordringen er at holde rede på lokale og globale variabler.

Eller kald Shell som #1 beskriver
P:\*.txt /s > tlpfile
og læs tmpfile linje for linje.
Avatar billede Ninjan Nybegynder
09. oktober 2013 - 08:51 #3
Rekursivitet har jeg styr på. Har man en gang set StockBillMat rapporten, så ved man det.

Det er det basale kald til at få mapperne jeg mangler.

PROCESS #PROC_Os 'COMMAND=\"ECHO P:\\*.* /s > C:\\Tmpfile.csv\"'

Virker ikke. Bær over med mig. Jeg er ikke DOS specialist.

Det er mapperne jeg gerne vil finde.
Directory 8 finder alle filerne ganske fint, men ikke mapperne.

Kan I hjælpe ?
Avatar billede jjam Juniormester
09. oktober 2013 - 10:01 #4
Jeg har selv haft store problemer med at køre dos kommandoer via XAL kald, specielt med parametre var der problemer. Jeg løste problemet ved at skrive .BAT eller .CMD filer og afvikle dem efterfølgende. (Undgå mellemrum i sti/filenavne).
1)    Dan filen rum.bat indeholdende
DIR P:\*.* /s > C:\tmp\Tmpfile.csv\
2)    Kør filen
Bemærk windows 7 har et problem med at skrive direkte til C:\ Hvorimod at skrive en file til C:\tmp er OK
( C:\tmp er oprettet manuelt)
Avatar billede Ninjan Nybegynder
09. oktober 2013 - 10:56 #5
INT &idx
STR 255 &Folders[]
STR 255 &Path = &PARM
PROCESS #PROC_Os 'COMMAND=\"DIR '+&Path+' > C:\\Tmpfile.txt\"'
Virker fint!
Plus READ <kode> END, hvor <kode> kalder rekursivt på &Folders[].

Men når der er " " <Space> i mappe-navnene, så fejler kaldet.

Hvordan løses det ?
Jeg har prøvet med \' og \" i alle mulige kombinationer uden held.
Avatar billede jjam Juniormester
09. oktober 2013 - 11:08 #6
Jeg har løst det ved at lave en tmp.bat file der indeholder selve DOS kommandoen med " omkring filnavne.
Filen oprettes med WRITE kommandoen

Feks. filen tmp.bat
DIR "P:\mappe med mellemrum\"  >  "C:\tmp.txt"

Herefter køre jeg filen med noget i retning med.
PROCESS #PROC_Os 'COMMAND=\"C:\run.bat"
Avatar billede Ninjan Nybegynder
10. oktober 2013 - 09:23 #7
LUKKET
Avatar billede Ninjan Nybegynder
10. oktober 2013 - 09:25 #8
Hov! Hvordan tildeler jeg dig points J-Jam ?
Avatar billede jjam Juniormester
23. oktober 2013 - 18:26 #9
points er ikke vigtig for mig :-)
Avatar billede olehaahr Nybegynder
12. marts 2014 - 21:21 #10
Ved godt at spørgsmålet er lukket... Men her er løsningen:

Du har glemt at sætte den globale variabel &InFldDel.
Hvis ikke du sætter den, så vil XAL/C5 bruge "space" som field delimeter. Og dermed "stopper" dit felt ved første mellemrum.
Når man bruger READ AS TEXT skal man altid sætte &InFldDel og &InRecDel.


STR 50 &Filnavn = "c:/olebole.txt"
STR 50 &Txt1

SET &InFldDel = "£££" //Dette findes ikke i din fil, så derfor indlæses hele linien i dit felt.

SET &InRecDel = "\r\n" //I Dos deles en fil med "Carriage Return/LineFeed. Hvis det er på Unix, er det kun LineFeed "\n".


READ &Filnavn AS TEXT INTO (&Txt1)
  Print &Txt1
END
PAUSE


Mvh Ole
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester