Avatar billede moejensen Nybegynder
29. februar 2004 - 10:51 Der er 13 kommentarer og
1 løsning

hjælp til læs fra fil

Jeg er ved at lave noget sprogkontrol på en hjemmeside. Til hvert sprog har jeg lavet en sprogfil. ex.

Danish.txt:

*#00001:Velkommen til
*#00002:Mere info
*#00003:Vælg sprog:

i min kode har jeg så førlgende funktion til at hive teksten ud:

<%
Function TextInput(intTextCode)
    Select Case session.LCID
    Case "1030"
        languageTxt = "Danish.txt"
    Case "1044"
        languageTxt = "Norweigian.txt"
    Case Else
        languageTxt = "English.txt"
    End Select
   
    Dim fso, f, filespec
    Set fso = CreateObject("Scripting.FileSystemObject")
    filespec = Server.Mappath("/languageFile/"&languageTxt)
    Set f = fso.OpenTextFile(filespec,1)
   
    f.ReadLine
    Do While not Mid(Server.HTMLencode(f.ReadAll), 3, 5) = intTextCode AND not f.AtEndOfStream
        f.ReadLine
    Loop
    if not f.AtEndOfStream then
          strTxt = Server.HTMLencode(f.ReadAll)
    end if
    f.Close
    set fso = nothing
    set filespec = nothing
   
    TextInput = strTxt
End Function
%>


Der hvor teksten skal sættes ind, skriver jeg følgende:

<%response.write TextInput(00001)%>

Så skal den gerne skrive det ud der står på

Velkommen til

Men der kommer ikke rigtig noget ud. Nogen ideer til hvad der er galt?
Avatar billede ellebaek Nybegynder
29. februar 2004 - 10:56 #1
prøv at rette:
Do While not Mid(Server.HTMLencode(f.ReadAll), 3, 5) = intTextCode AND not f.AtEndOfStream
        f.ReadLine
    Loop

til:
Do While not left(Server.HTMLencode(f.ReadAll), 3, 7) = intTextCode AND not f.AtEndOfStream
        f.ReadLine
    Loop
Avatar billede eagleeye Praktikant
29. februar 2004 - 10:56 #2
Prøv uden " omkring tallene:

Case 1030
Avatar billede moejensen Nybegynder
29. februar 2004 - 11:08 #3
ellebaek: jeg får nu følgende fejl: Wrong number of arguments or invalid property assignment: 'left'

eagleeye: det giver ingen ændring
Avatar billede eagleeye Praktikant
29. februar 2004 - 11:17 #4
ReadAll læser hele filen og flytter il-pointeren til AtEndOfStream
Så denne linje skal msåle være noget med readLine

Do While not Mid(Server.HTMLencode(f.ReadAll), 3, 5) = intTextCode AND not f.AtEndOfStream

sådan her

Do While not Mid(Server.HTMLencode(f.readLine), 3, 5) = intTextCode AND not f.AtEndOfStream
Avatar billede moejensen Nybegynder
29. februar 2004 - 11:26 #5
aha, ja

men nu får jeg følgende fejl: Input past end of file
Avatar billede eagleeye Praktikant
29. februar 2004 - 11:28 #6
Inden i do er denne så ikke nødvendig:  f.ReadLine
Ellers springer den hver anden linje over. Så prøv:

Do While not Mid(Server.HTMLencode(f.readLine), 3, 5) = intTextCode AND not f.AtEndOfStream
Loop
Avatar billede moejensen Nybegynder
29. februar 2004 - 11:43 #7
Jeg får stadig ikke noget ud.

Jeg tænkte på hvad denne linje gør: f.readLine - læser den næste linje, eller læser den den samme linje ?

burde jeg kunne skrive response.write f - og så få udskrevet den linje der ligger i f ?
Avatar billede eagleeye Praktikant
29. februar 2004 - 11:48 #8
Filer fungere ved en fil-pointer og den flyttes igennem filen som man bruger funktionerne read, readline og readall.

read læser X antal karakter .read(2)
readLine skulle læses indtild vbCrLf

En linje bliver kun læst en gang.

Måske du skal kigge på det med  Server.HTMLencode deet gør nogle karakter bliver til noget sjovt..


Så hvis du vil udskrive det den kommer til kan det gøre:

str = f.readLine
Do While not Mid(Server.HTMLencode(str), 3, 5) = intTextCode AND not f.AtEndOfStream
  str = f.readLine
Loop
Avatar billede moejensen Nybegynder
29. februar 2004 - 12:05 #9
Så kom der da noget ud :-)

Men uandet hvad jeg skriver i <%response.write TextInput(00001)%> så skriver den den sidste linie ud...

og så har jeg fået et andet problem, som jeg er stødt på før. når man bruger fso til at læse en fil, så fatter den ikke æ,ø og å - findes der en løsning på det?

Koden ser nu således ud:


Function TextInput(intTextCode)
    Select Case session.LCID
    Case 1030
        languageTxt = "Danish.txt"
    Case 1044
        languageTxt = "Norweigian.txt"
    Case Else
        languageTxt = "English.txt"
    End Select
   
    Dim fso, f, filespec
    Set fso = CreateObject("Scripting.FileSystemObject")
    filespec = Server.Mappath("/languageFile/"&languageTxt)
    Set f = fso.OpenTextFile(filespec,1)
   
    strTxt = f.readLine
    Do While not Mid(Server.HTMLencode(strTxt), 3, 5) = intTextCode AND not f.AtEndOfStream
      strTxt = f.readLine
    Loop

    strTxt = right(Server.HTMLencode(strTxt), LEN(strTxt)-8)
       
    f.Close
    set fso = nothing
    set filespec = nothing
   
    TextInput = strTxt
End Function
Avatar billede moejensen Nybegynder
29. februar 2004 - 12:39 #10
aha jeg har nu fundet ud af det med æ,ø og å, jeg skulle bare fjerne Server.HTMLencode
Avatar billede eagleeye Praktikant
29. februar 2004 - 15:24 #11
Ok, skal der ikke " omkring hvor du kalder funktionen? 
TextInput(00001)
Sådan her:  TextInput("00001")
Avatar billede moejensen Nybegynder
29. februar 2004 - 15:37 #12
Så virker det jo :-)

laver du lige et svar
Avatar billede eagleeye Praktikant
29. februar 2004 - 15:41 #13
Ok. Jeps, det gør jeg da :)
Avatar billede moejensen Nybegynder
29. februar 2004 - 15:47 #14
tusind tak for hjælpen
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
Kurser inden for grundlæggende programmering

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