Avatar billede _petrucci Nybegynder
29. januar 2002 - 10:24 Der er 12 kommentarer og
4 løsninger

Opret fil, smid indhold i den og download

Hejsa :)

Nu skal jeg til at "lege" lidt med filobjectet. Her er hvad jeg skal have fikset:

- Når bruger klikker på en knap skal funktionen oprette en fil med extension .csv som er en ganske alm. tekst fil.
- Derefter skal den smide indholdet af et recordset (loop) ind i tekstfilen - som skal kommasepareres med anførselstegn rundt om de enkelte feltværdier
- Derefter skal man kunne downloade den oprettede fil - dvs. den almindelige "save file as" popup skal komme frem.

Nu har jeg ikke arbejdet med FileSystem Object før, så er der én der kan hjælpe mig i denne forbindelse? :)

Avatar billede agony Nybegynder
29. januar 2002 - 10:27 #1
gider ikke lige lave det for dig for det lære du jo ikke nær så meget af, men her er et link til et udemærket site med alt hvad du skal bruge.

http://www.w3schools.com/asp/asp_ref_file.asp
Avatar billede _petrucci Nybegynder
29. januar 2002 - 10:36 #2
Spørgsmålet er om min server nu understøtter FileSystemObject - har prøvet at køre følgende kode i en browser:

<%
dim ObjFSO, ObjFile, DefaultDir, OverWriteFile

'Her vælger vi det direktorie hvor vi ønsker vores fil skal gemmes
DefaultDir = "C:\"

'Her vælger vi om filen skal overskrives, hvis den allerede er blevet oprettet
OverWriteFile = True

Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Set ObjFile = ObjFSO.CreateTextFile(DefaultDir & "testfilepalle.csv", OverWriteFile)
ObjFile.WriteLine("Du har nu lavet din første txt fil via ASP")
ObjFile.WriteLine("Var det ikke nemt?")
ObjFile.Close

Set ObjFile = Nothing
Set ObjFSO = Nothing

%>

Den laver dog ingen fil - siden forbliver blank, hvilket den jo sikkert skal - men ingen fil nogensteder....
Avatar billede coltau Juniormester
29. januar 2002 - 10:43 #3
Prøv lige at skifte denne linie:

DefaultDir = Server.MapPath("\") & "\"

ellers ser det korrekt ud.
Avatar billede _petrucci Nybegynder
29. januar 2002 - 10:50 #4
ok den kommer så med "permission denied" så jeg skal nok snakke lidt med sysadm. Men er det ikke muligt at lave en temp "fil", dvs. ikke nødvendig oprette filen på serveren, men generere indholdet af den og derefter lade brugeren downloade det generedede (i form at en *.csv fil) ?
Avatar billede coltau Juniormester
29. januar 2002 - 12:11 #5
Her er asp-kode der generere en tekst-fil i stedet for html-kode.

<%
Response.Expires = 0
Response.Buffer = TRUE
Response.Clear
Response.ContentType="text/file"
Response.Write("Linie1" & vbCrLf)
Response.Write("Linie2" & vbCrLf)
Response.End
%>

Jeg kan ikke umiddelbart få den til at foreslå csv som extention. (Den foreslår .asp)
Avatar billede webbe Nybegynder
29. januar 2002 - 12:14 #6
Lytter lige med...
Avatar billede webbe Nybegynder
29. januar 2002 - 12:17 #7
Men kan give dig koden til at danne din .csv-fil

Her er den:

Session("Kundenr")
Session("Password")

'Danner kommafilen ud fra kundenr
filEfternavn = ".kom"

'Find et filnavn
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
fileName = Session("Kundenr")&filEfternavn

i = 1

do while objFSO.FileExists(Server.MapPath("./concorde/"&fileName))
        fileName = Session("Kundenr")&"("&i&")"&filEfternavn
        i = i + 1
loop
   
Set objTextStream = objFSO.CreateTextFile(Server.MapPath("./concorde/"&fileName))

'indsætter i DB
sql = "INSERT INTO Data (Kundenr_id,Sys_dato,Kom_fil) VALUES ("&"'"&Request.Form("kundenr")&"', '"&date&"', '"&filename&"')"
Connect.Execute(sql)

'Skriver til text-filen linie for linie
If Request.Form("dato1") <> "" OR Request.Form("bilag1") <> "" OR Request.Form("konto1") <> "" OR Request.Form("tekst1") <> "" Then
    for i = 1 to 5
        outStr = Request.Form("dato" & i) & ","
        outStr = outStr & Request.Form("bilag" & i) &  ","
        outStr = outStr & Request.Form("t" & i) & ","
        outStr = outStr & Request.Form("konto" & i) & ","
        outStr = outStr & Request.Form("tekst" & i) & ","
        outStr = outStr & Request.Form("kasse_ind" & i) & ","
        outStr = outStr & Request.Form("kasse_ud" & i) & ","
        outStr = outStr & Request.Form("bank_ind" & i) & ","
        outStr = outStr & Request.Form("bank_ud" & i)
       
        If outStr <> ",,,,,,,," Then
            objTextStream.WriteLine outStr
        End if
       
    next
End if

objTextStream.Close
Set objTextStream = Nothing
Set objSFO = Nothing

Eksemplet kræver selvfølgelig tilretning!
Avatar billede _petrucci Nybegynder
29. januar 2002 - 12:18 #8
Ok, nu fik jeg så laves skrive-rettigheder på mappen. Og min ovenstående kode fik fint oprettet en test.csv fil med det rigtige indhold.

Så drejer det sig jo bare om at hive info ud af recordsettet og lave et loop der indsætter det hele i tekst-filen.

Problemet er nu...hvordan kan man efter at filen er lavet....lave en funktion hvor filen downloades (save prompt) og DEREFTER...skal filen slettes igen?
Avatar billede sylvester1 Nybegynder
29. januar 2002 - 14:56 #9
Istedet for at lave en CSV fil, hvorfor laver du så ikke bare en rigtig xls fil?
Det er slet ikke så svært! :)

Det der sker her er, at den slet ikke genererer en fil på serveren. Den laver det hele dynamisk, og sender resultatet tilbage til browseren som en ukendt type (for browseren), og du får lov til at downloade filen.

Det smarte her, er at istedet for den kommaseparerede fil, så får du et velformateret excel dokument, som du også kan ændre farver, font (bold italic osv.) og mange andre ting.
Det her er den mest brugervenlige løsning, og du slipper for rod med .temp filer på serveren, og ydelsen bliver boostet betydeligt!

-----------------------------------
<%
Response.Buffer = TRUE

Response.ContentType = "bad/type"
Response.AddHeader "Content-Disposition","attachment; filename=excelexport.xls"

Response.Flush
%>
</table>
<tr>
    <td>Felt 1</td>
    <td>Felt 2</td>
</tr>
<tr>
    <td>Felt 3</td>
    <td>Felt 4</td>
</tr>
<tr>
    <td>Felt 5</td>
    <td>Felt 6</td>
</tr>
</table>
Avatar billede _petrucci Nybegynder
29. januar 2002 - 15:03 #10
Fin idé - men desværre krævet funktionen at det er en .csv fil, idet der bliver brugt .csv filer til at indlæse indholdet i et specielt internt program.

Hovedproblemet her, er hvordan filen kan blive slettet automatisk, EFTER at downloaden er complete. Plus et lille tillægsspørgsmål, som meget nemt kan resultere i lidt flere point til den med det rigtige svar:

Hvordan får jeg indsat anførselstegn i text-filen?

Eks:

"25-01-2002", "500", "100422-124", "25"

Når jeg prøver at indsætte &#34;, skriver den bare &#34; istedet for anførselstegn.
Avatar billede _petrucci Nybegynder
29. januar 2002 - 15:23 #11
woops, never mind - fandt selv lige ud af det sidste spørgsmål:

anf = chr(34)
ObjFile.WriteLine anf & rs("id") & .....

Mangler stadig forslag/løsning til det første spørgsmål dog :)
Avatar billede coltau Juniormester
29. januar 2002 - 15:38 #12
Du kan jo gå tilbage til den med at generere filen i hukommelsen - som nævnt tidligere. Så skal filen ikke slettes.
Det eneste der sker for brugeren er at der fremkommer en "gem som" - dialogboks hvor han blot skal gemme filen.
Avatar billede _petrucci Nybegynder
29. januar 2002 - 15:55 #13
Nja...nu fik jeg det netop til at virke med at oprette filen og smide det helt præcise indhold ned i den. Men måske skulle jeg gøre brug af flere filer og "overwrite" metoden så filen bare bliver liggende, men overskrives næste gang funktionen kaldes. Finder ud af noget alternativt - mange tak for svarene :)
Avatar billede coltau Juniormester
29. januar 2002 - 16:11 #14
Tak - Tak. Hvis du vælger den sidste løsning med overskrivning af fil - så kan det jo blive et problem hvis flere gør det på en gang. :-)
Avatar billede _petrucci Nybegynder
30. januar 2002 - 07:50 #15
Da der kun er én bruger fra en virksomhed der må logge ind, kan jeg jo bare lave flere filer med virksomhedens id som filnavn - så opstår dette problem ikke. Til gengæld kræver det lidt mere plads på serveren men hva faaan :)
Avatar billede kratluskeren Nybegynder
11. januar 2004 - 20:30 #16
Det sq smart sylvester1 :)
og _petrucci, der er jo ingen hindringer i at skrive en csv fil med sylvester1's løsningen.

Jeg har netop brugt denne løsning til at eksportere en tabel til csv og det fungerer fint.
Med denne løsning slipper man for at gemme filer, for derefter at downloade dem og slette dem igen.
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