|
| Brug af LIKE i filliste-funktion? Fra : Lars Grove Mortensen |
Dato : 21-07-08 07:29 |
|
Hej alle på NG
Jeg er ved at lave en automatiseret liste over filer i nogle
mapper.
Jeg bruger følgende funktion for at liste filerne:
for each item in folder.Files
url = MapURL(item.path)
Response.Write("<li><a href=""" & url & """
target='_blank'>" & item.Name & "</a> - " _
& item.Size & " bytes, " _
& "senest ændret: " & item.DateLastModified & "." _
& "</li>" & vbCrLf)
next
Det virker sådan set fint!
Men jeg vil gerne nøjes med at liste alle filer, hvor ordet
"risk" ikke indgår i filnavnet.
Derfor har jeg forsøgt med:
for each item in folder.Files
if item.Name <> LIKE "%risk%" Then
url = MapURL(item.path)
Response.Write("<li><a href=""" & url & """
target='_blank'>" & item.Name & "</a> - " _
& item.Size & " bytes, " _
& "senest ændret: " & item.DateLastModified & "." _
& "</li>" & vbCrLf)
end if
next
Det virker imidlertid ikke.
Hvad gør jeg galt/hvad skal jeg i stedet gøre?
På forhånd mange tak for hjælpen!
MVH
Lars
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Weber (21-07-2008)
| Kommentar Fra : Michael Weber |
Dato : 21-07-08 09:21 |
|
Lars Grove Mortensen wrote:
> Hej alle på NG
>
> Jeg er ved at lave en automatiseret liste over filer i nogle
> mapper.
>
> Jeg bruger følgende funktion for at liste filerne:
>
> for each item in folder.Files
> url = MapURL(item.path)
> Response.Write("<li><a href=""" & url & """
> target='_blank'>" & item.Name & "</a> - " _
> & item.Size & " bytes, " _
> & "senest ændret: " & item.DateLastModified & "." _
> & "</li>" & vbCrLf)
> next
>
>
> Det virker sådan set fint!
>
> Men jeg vil gerne nøjes med at liste alle filer, hvor ordet
> "risk" ikke indgår i filnavnet.
>
> Derfor har jeg forsøgt med:
>
>
> for each item in folder.Files
>
> if item.Name <> LIKE "%risk%" Then
> url = MapURL(item.path)
> Response.Write("<li><a href=""" & url & """
> target='_blank'>" & item.Name & "</a> - " _
> & item.Size & " bytes, " _
> & "senest ændret: " & item.DateLastModified & "." _
> & "</li>" & vbCrLf)
> end if
>
> next
>
>
> Det virker imidlertid ikke.
>
> Hvad gør jeg galt/hvad skal jeg i stedet gøre?
Den her linje:
if item.Name <> LIKE "%risk%" Then
forsøger du vist at bruge noget sql-syntax.
Ganske snedigt...hvis den altså gik.
:)
Prøv at skifte den ud med:
if InStr(1, item.Name ,"risk",1) = 0 Then
InStr betyder In String og returnerer index
for første forekomst af søgeordet. Returnerer 0
hvis ingen forekomster er fundet.0 betyder
IKKE at der er fundet en forekomst ved første
bogstav!(*).
Linjen siger...Start med at søge ved startPosition 1 i
strengen item.Name og søg efter "risk" og
gør det 1 = tekstuelt.
InStr-funktionen:
http://www.w3schools.com/Vbscript/func_instr.asp
Alle funktioner i VB-script:
http://www.w3schools.com/Vbscript/vbscript_ref_functions.asp
(*) Du skal lige være opmærksom på at indexeringen
af strenge ikke er zero-based, hvilket kan være lidt
"forvirrende".
--
Med venlig hilsen
Michael Weber
Mod humor kæmper selv Guderne forgæves.
| |
Lars Grove Mortensen (21-07-2008)
| Kommentar Fra : Lars Grove Mortensen |
Dato : 21-07-08 10:31 |
|
Hej Michael
Tak for dit svar. Jeg var - af anden vej - allerede blevet ledt
ind på InStr og havde lige præcist nået at poste noget herom...
men med din hjælp lykkedes det endelig. Løsningen blev:
if InStr(1, item.Name ,"risk",1) <> 0 Then
Tak for hjælpen!!
MVH
Lars
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Lars Grove Mortensen (21-07-2008)
| Kommentar Fra : Lars Grove Mortensen |
Dato : 21-07-08 11:12 |
|
Men hvordan får man så en liste over mapper, der indeholder/ikke
holder filer, hvor "risk" indgår i filnavnet?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Weber (21-07-2008)
| Kommentar Fra : Michael Weber |
Dato : 21-07-08 11:40 |
|
Lars Grove Mortensen wrote:
> Men hvordan får man så en liste over mapper, der indeholder/ikke
> holder filer, hvor "risk" indgår i filnavnet?
Det må vel være en løkke inde i en løkke, hvor den yderste løkke
gennemløber alle mapper og den inderste løkke gennemløber alle
filer i den enkelte mappe.
--
Med venlig hilsen
Michael Weber
Mod humor kæmper selv Guderne forgæves.
| |
Christian Kragh (23-07-2008)
| Kommentar Fra : Christian Kragh |
Dato : 23-07-08 09:03 |
|
> Det må vel være en løkke inde i en løkke, hvor den yderste løkke
> gennemløber alle mapper og den inderste løkke gennemløber alle
> filer i den enkelte mappe.
Jeg ville hellere bruge en rekursuv funktion til dette...
En funktion der læser mapperne.
Jeg viser lige hvordan.
Det er alt indholdet i mappen "folder" jeg vil læse
function mapper(mappe)
'' Vælger mappen der skal åbnes
set fo=fs.GetFolder(Server.MapPath(mappe& "/"))
'' Viser alle filer i en given mappe
for each x in fo.files
response.write "<div>"
response.write x.Name
response.write "</div>" & vbcrlf
next
'' Viser alle mapper i en given mappe
for each x in fo.SubFolders
response.write "<a href='#'>" & vbcrlf
response.write x.name & vbcrlf
response.write "</a>" & vbcrlf
'' Kalder samme funktion men med mappenavnet fra nu samt
'' mappenavnet på den nye undermappe
response.write mapper(mappe & "/" & x.name)
next
end function
dim fs,fo,x,y
set fs=Server.CreateObject("Scripting.FileSystemObject")
response.write mapper("folder")
fs.Close
Set fs= Nothing
fo.Close
Set fo= Nothing
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Christian Kragh (23-07-2008)
| Kommentar Fra : Christian Kragh |
Dato : 23-07-08 09:07 |
|
> '' Viser alle filer i en given mappe
> for each x in fo.files
> response.write "<div>"
> response.write x.Name
> response.write "</div>" & vbcrlf
> next
Jeg glemte at sige at du så kan lave en if sætning som
det ellers er blevet foreslået af flere, men jeg syntes at
"Michael Weber's" foreslag er det bedste med en lille ændring.
Jeg ville sætte den her:
'' Viser alle filer i en given mappe
for each x in fo.files
if ............
response.write "<div>"
response.write x.Name
response.write "</div>" & vbcrlf
end if.........
next
Hvis jeg sætter lcase() om navnet så finder den alle uden "risk"
if InStr(1, lcase(x.Name) ,"risk",1) = 0 Then
Hvis jeg vil have dem med "risk" bruger jeg følgende kode
if InStr(1, lcase(x.Name) ,"risk",1) <> 0 Then
Venlig hilsen
Christian
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Michael Weber (23-07-2008)
| Kommentar Fra : Michael Weber |
Dato : 23-07-08 12:40 |
|
Christian Kragh wrote:
>> '' Viser alle filer i en given mappe
>> for each x in fo.files
>> response.write "<div>"
>> response.write x.Name
>> response.write "</div>" & vbcrlf
>> next
>
> Jeg glemte at sige at du så kan lave en if sætning som
> det ellers er blevet foreslået af flere, men jeg syntes at
> "Michael Weber's" foreslag er det bedste med en lille ændring.
>
> Jeg ville sætte den her:
>
> '' Viser alle filer i en given mappe
> for each x in fo.files
> if ............
> response.write "<div>"
> response.write x.Name
> response.write "</div>" & vbcrlf
> end if.........
> next
for...each er næppe en god idé i dette tilfælde,
da det er en søgning og der ikke er behov for
at fortsætte efter man har fundet en fil.
Man kunne jo være (u)heldig at første fil man tjekker op mod,
er en fil med "risk".
Man skal nok, på en eller anden måde, have indkorporeret
en boolsk variabel som indikerer om man har fundet, hvad man søgte efter.
:)
>
> Hvis jeg sætter lcase() om navnet så finder den alle uden "risk"
>
> if InStr(1, lcase(x.Name) ,"risk",1) = 0 Then
>
> Hvis jeg vil have dem med "risk" bruger jeg følgende kode
>
> if InStr(1, lcase(x.Name) ,"risk",1) <> 0 Then
Prøv følgende kode :
dim str
str = "blaRISKitall"
if InStr(1, str ,"risk",1) <> 0 Then
Response.Write "fandt ordet risk ved :" & InStr(1, str ,"risk",1)
end if
Prøv bagefter, med ovenstående kode, at ændre
InStr(1, str ,"risk",1)
til
InStr(1, str ,"risk",0)
:)
--
Med venlig hilsen
Michael Weber
Mod humor kæmper selv Guderne forgæves.
| |
Michael Weber (23-07-2008)
| Kommentar Fra : Michael Weber |
Dato : 23-07-08 13:21 |
|
Michael Weber wrote:
>
> for...each er næppe en god idé i dette tilfælde,
> da det er en søgning og der ikke er behov for
> at fortsætte efter man har fundet en fil.
> Man kunne jo være (u)heldig at første fil man tjekker op mod,
> er en fil med "risk".
>
> Man skal nok, på en eller anden måde, have indkorporeret
> en boolsk variabel som indikerer om man har fundet, hvad man søgte efter.
> :)
>
Doh!!!
Det var jo ikke en søgning, men en listning.
Glem jeg skrev det.
Flot Michael, hvordan synes du selv det går ?
Tjoe...
:P
--
Med venlig hilsen
Michael Weber
Mod humor kæmper selv Guderne forgæves.
| |
Christian Kragh (23-07-2008)
| Kommentar Fra : Christian Kragh |
Dato : 23-07-08 20:18 |
|
> Flot Michael, hvordan synes du selv det går ?
> Tjoe...
Du klare dig 42.
Der er nogle der ved hvad jeg snakker om...
Men det du skrev stod jeg selv og skulle bruge nogle friske øjne på så det var
rart at se en mulighed.
Christian
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Lars Grove Mortensen (21-07-2008)
| Kommentar Fra : Lars Grove Mortensen |
Dato : 21-07-08 10:27 |
|
Hej alle på NG
Jeg fik det tip at bruge: If InStr(item.Name, "risk") <> 0 Then,
altså:
for each item in folder.Files
If InStr(item.Name, "risk") <> 0 Then
url = MapURL(item.path)
Response.Write("<li><a href=""" & url & """
target='_blank'>" & item.Name & "</a> - " _
& item.Size & " bytes, " _
& "senest ændret: " & item.DateLastModified & "." _
& "</li>" & vbCrLf)
end if
next
Det virker fint. Men det er case-sensitive. For at køre
case-in-sensitive, fik jeg det tip at bruge:
If InStr(item.Name, "risk", 1) <> 0 Then
Eller: If InStr(item.Name, "risk", VBTEXTCOMPARE) <> 0 Then
Men begge disse giver fejl:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
Typer stemmer ikke overens:
Hvad gør jeg så nu?
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
Jørn Andersen (21-07-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 21-07-08 13:35 |
|
On 21 Jul 2008 09:26:53 GMT, Lars Grove Mortensen
<spam@grove-mortensen.dk> wrote:
> If InStr(item.Name, "risk") <> 0 Then
<snip>
>Det virker fint. Men det er case-sensitive. For at køre
>case-in-sensitive, fik jeg det tip at bruge:
>
>If InStr(item.Name, "risk", 1) <> 0 Then
>Eller: If InStr(item.Name, "risk", VBTEXTCOMPARE) <> 0 Then
>
>Men begge disse giver fejl:
>
>Der opstod en Microsoft VBScript-kørselsfejl (0x800A000D)
>Typer stemmer ikke overens:
De burde ikke give fejl, hvis item.Name indeholder en streng, men du vil
få problemer, hvis den indholder en Null-værdi (det ved jeg ikke, om den
kan ...).
Du kan måske komme ud over det ved:
strItemName = LCase("" & item.Name)
If InStr(strItemName, "risk", 1) <> 0 Then
osv.
LCase gør din streng LowerCase.
Good luck!
--
Jørn Andersen,
Brønshøj
| |
|
|