/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste