Avatar billede webbe Nybegynder
22. oktober 2001 - 09:20 Der er 46 kommentarer og
1 løsning

Gemme i en kommafil!?

Hejsa

Jeg er ved at lave et site hvor jeg skal have nogle brugerindtastede informationer gemt i en kommas-separeret fil.

Desuden skal der dannes en ny fil for hver gang der bliver trykket på \"Gem\".
Denne fil skal navngives ud fra et kundenr!

Er der nogen der ved hvordan man gør det?
Avatar billede cliche Nybegynder
22. oktober 2001 - 09:33 #1
Hvor kommer kundenummeret fra?
Avatar billede webbe Nybegynder
22. oktober 2001 - 09:34 #2
Kundenummeret kommer fra login!

Brugernavnet er lig med kundenummeret og det ligges i en session!
Avatar billede cliche Nybegynder
22. oktober 2001 - 09:37 #3
OK, hvad hedder den session, og hvor mange forms, skal gemmes i tekstfilen?
Avatar billede webbe Nybegynder
22. oktober 2001 - 09:38 #4
Session(\"Kundenr\")

Der er plads til at lave 6 posteringer/rækker.

Meningen er at den komma-fil skal kunne importeres i Concorde/XAL bagefter!
Avatar billede cliche Nybegynder
22. oktober 2001 - 09:40 #5
OK :)

Kommer lige med et eksempel så :)
Avatar billede webbe Nybegynder
22. oktober 2001 - 10:06 #6
Kan man lave så der kun bliver gemt det antal rækker som der er tastet ind???

Fx. hvis kunden kun har 3 posteringer, at der så kun gemmes 3 rækker i kommafilen istedet for 3 rækker med oplysninger og 3 tomme rækker???
Avatar billede webbe Nybegynder
22. oktober 2001 - 10:07 #7
Flere point i vente hvis der kommer en god løsning der er let at rette til!! ;0)
Avatar billede cliche Nybegynder
22. oktober 2001 - 10:12 #8
Jeg kan komme med en fuld løsning, sidder bare og stener over hvordan jeg opretter en tekstfil, skal filen overskrives når brugeren logger ind igen eller hvad? eller skal der tilføjes? til det som allerede er i filen?
Avatar billede mh77 Nybegynder
22. oktober 2001 - 10:13 #9
Hejsa

lige et lille tillægsspørgsmål

hvordan sikre man at alle brugeres data bliver indsat i en text-fil. Jeg mener kan jeg låse den mens jeg er ved at skrive til den?

:)
Avatar billede webbe Nybegynder
22. oktober 2001 - 10:14 #10
Der skal bare dannes en ny komma-fil!

Der skal ikke overskrives....så fil-systemet for den samme kunde bliver:

kundenr.kom
kundenr(1).kom
kundenr(2).kom
...

osv.
Avatar billede cliche Nybegynder
22. oktober 2001 - 10:15 #11
hmmm :) svær lille ting du har sat mig på, men kigger vidre
Avatar billede webbe Nybegynder
22. oktober 2001 - 10:16 #12
cliche:

*GG*
Takz du - vil være kanon hvis du kan lave en løsning der fungerer! *S*

Du vil få 200 point hvis din løsning fungerer!
Avatar billede cliche Nybegynder
22. oktober 2001 - 10:25 #13
lad os sige du har 3 forms som skal gemmes
så ville følgende se således ud

form1 = request.form(\"1\")
form2 = request.form(\"2\")
form3 = request.form(\"3\")

writeline form1 & \",\" & form2 & \",\" & form3

Men hvis form2 nu er tom kommer det til st stå sådan her

hej,,hej

Skal kommaet fjernes hvis den pågældende form er tom?
Avatar billede webbe Nybegynder
22. oktober 2001 - 10:27 #14
Ja - der må ikke komme nogen tomme linier ind i concorden!
Så kommaet skal slettes hvis formularen er tom!
Avatar billede webbe Nybegynder
22. oktober 2001 - 11:58 #15
Ingen tomme linier, men tomme felter er okay!

Du kan evt. se det her:

http://www.scanbox.dk/revisor

klik på service -> Tast selv

Brugernavn: 29661771
Password: admin
Avatar billede rasmustest Nybegynder
22. oktober 2001 - 12:56 #16
lytter med...
Men hvorfor ikke gemme den i fil pr. bruger
kig her:
<%
Set fso = CreateObject(\"Scripting.FileSystemObject\")
filespec = Server.MapPath(\"mappe/brugernavn.txt\")
Set F = fso.OpenTextFile(Filespec,2)

f.write request(\"Dato\")
f.write requset.form(\"billag\")
f.write requset.form(\"konto\")
f.write requset.form(\"tekst\")
f.write requset.form(\"Indsæt\")
f.write requset.form(\"Hævet\")
f.write requset.form(\"Indsæt\")
f.write requset.form(\"Hævet,\")

\'husk komma til sidst. hvorfor?? kommer
f.close
%>

Når du skal læse den:

<%
Set Fso = CreateObject(\"Scripting.FileSystemObject\")
filespec = Server.MapPath(\"mappe/brugernavn.txt\")
Set F = fso.OpenTextFile(Filespec,2)

arrM = (f.ReadLine,\",\")
\'spilter efter komma!!!
Do While no f.AtEndOfStram
Response.Write \"Dato: \" arrM(0) \"<br>\"
Response.Write \"Billag: \" arrM(1) \"<br>\"
Response.Write \"konto: \" arrM(2) \"<br>\"
Response.Write \"Texst: \" arrM(3) \"<br>\"
Response.Write \"Indsæt \" arrM(4) \"<br>\"
Response.Write \"Hævet: \" arrM(5) \"<br>\"
Response.Write \"Indsæt \" arrM(6) \"<br>\"
Response.Write \"Hævet: \" arrM(7) \"<br>\"
Loop

f.close
%>
Forklaring Du samler data husk komma efter hvert
billag (eller hvad det nu hedder)Så den adsleller det.

Rasmus
Avatar billede rasmustest Nybegynder
22. oktober 2001 - 12:57 #17
håber det virker!
Avatar billede webbe Nybegynder
22. oktober 2001 - 14:16 #18
rasmustest:

Jeg har ikke brug for at kalde informationerne frem igen efter de er lagt i kommafilen - de skal importeres til Concorde/XAL bagefter.

Vil dit svar give en fil der hedder fx. 29661771.txt?????

Skal der ikke komma efter hver request.form????
Sådan her:

f.write request(\"Dato,\")
f.write requset.form(\"billag,\")
f.write requset.form(\"konto,\")
f.write requset.form(\"tekst,\")
f.write requset.form(\"Indsæt,\")
f.write requset.form(\"Hævet,\")
f.write requset.form(\"Indsæt,\")
f.write requset.form(\"Hævet,\")

så jeg på den måde får adskilt felterne???
Avatar billede webbe Nybegynder
22. oktober 2001 - 14:30 #19
rasmustest:

Dit forslag virker ikke!

Der dannes ikke automatisk en fil der indeholder de informationer der tastes ind!
Avatar billede rasmustest Nybegynder
22. oktober 2001 - 14:52 #20
jeg arbejder videre!måske kan jeg måske ikke
Avatar billede webbe Nybegynder
22. oktober 2001 - 14:53 #21
Kan lave en kommasepareret fil på den her måde, men stadig ikke hvor den automatisk opretter filen!

Set fso = CreateObject(\"Scripting.FileSystemObject\")
filespec = Server.MapPath(\"concorde/\"&Session(\"Kundenr\")&\".kom\")
Set F = fso.OpenTextFile(Filespec,2)

f.write Request.Form(\"kundenr\")&\",\"
f.write Request.Form(\"Dato1\")&\",\"
f.write Request.Form(\"bilag1\")&\",\"
f.write Request.Form(\"t1\")&\",\"
f.write Request.Form(\"konto1\")&\",\"
f.write Request.Form(\"tekst1\")&\",\"
f.write Request.Form(\"kasse_ind1\")&\",\"
f.write Request.Form(\"kasse_ud1\")&\",\"
f.write Request.Form(\"bank_ind1\")&\",\"
f.write Request.Form(\"bank_ud1\")
f.close
Avatar billede eagleeye Praktikant
22. oktober 2001 - 16:07 #22
Hvad skal man kunne taste ind?
Og i hvilken række følge skal det gemmes i filen?
Avatar billede webbe Nybegynder
22. oktober 2001 - 16:09 #23
Man skal kunne taste

Dato, Bilagsnr, T (ved ikke hvad det står for), Kontonr, Tekst, Kasse ind, Kasse ud, Bank ind, Bank ud

Og det skal komme/gemmes i den rækkefølge!

Det er til en revisor....se evt. linket lidt højere oppe!
Avatar billede eagleeye Praktikant
22. oktober 2001 - 17:10 #24
Så det du skal hvade er en fil som kan gemme de 6 rækker i en fil

hvordan skal man skifte række er det med retur?
Avatar billede eagleeye Praktikant
22. oktober 2001 - 17:16 #25
Lad mig spørge på en anden måde....
En række i tabellen save til en linie i filen?
Avatar billede eagleeye Praktikant
22. oktober 2001 - 19:24 #26
OK:
Den skulle meget gerne virke med din form på siden http://www.scanbox.dk/revisor. Det er ikke lavet tjek på noget anden end den ikke skriver linien til filen hvis man ikke har indtastet noget. Jeg har gennemløst de forskellige kommetare og kommet til følgende:

1. Session(\"Kundenr\")
2. Der er plads til at lave 6 posteringer/rækker.
3. Der skal bare dannes en ny komma-fil! Der skal ikke overskrives....så fil-systemet for den samme kunde bliver:
kundenr.kom
kundenr(1).kom
kundenr(2).kom
4. Ingen tomme linier, men tomme felter er okay!


FILEN    save1.asp  ....:

<%
\'KONSTANTER
filEfternavn = \".kom\"
%>
<html>
<head>
<title>Skriver filen</title>
</head>
<body>
<%
\'Find a filename
Set objFSO = Server.CreateObject(\"Scripting.FileSystemObject\")
fileName = Session(\"Kundenr\") & filEfternavn
i = 1
do while objFSO.FileExists(Server.MapPath(fileName))
  fileName = Session(\"Kundenr\") & \"(\" & i & \")\" & filEfternavn
  i = i + 1
loop
Set objTextStream = objFSO.CreateTextFile(Server.MapPath(\"\" & fileName))

Response.Write \"KundeNr: \" & Session(\"Kundenr\") & \"<br>\"
Response.Write \"Filnavn: \" & fileName & \"<br>\"

\'Udskriv til filen linie for linie.
for i = 1 to 6 
  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 <> \",,,,,0,0,0,0\" then 
    objTextStream.WriteLine outStr
    Response.Write \"Linie \"&i& \" skrevet til filen : \" & outStr & \"<br>\"
  end if
next

objTextStream.Close
Set objTextStream = Nothing
Set objFSO = Nothing
%>

Filen er gemt...
</body>
</html>
Avatar billede webbe Nybegynder
22. oktober 2001 - 19:25 #27
eagleeye:

Der er plads til 6 posteringer i formularen (rækker med input felter) = 6 rækker i tabellen = 6 linier i kommafilen

Men der skal tages højde for at alle 6 rækker med posteringer ikke er udfyldt....kunden har måske kun 4 posteringer den ene dag, men 6 posteringer den anden dag!

Du kan evt. se det her:

http://www.scanbox.dk/revisor

klik på service -> Tast selv

Brugernavn: 29661771
Password: admin

Avatar billede webbe Nybegynder
22. oktober 2001 - 19:32 #28
Kigger lige på det imorgen hvor jeg har direkte adgang til serveren....men det ser lovende ud! ;0)

Der skal ikke ændres noget i formularfilen eller hvad???

Det er én <form></form> tag omkring mine 6 rækker med input felter!

Dannes der en fil for hver række eller en fil med 6 kommaseparerede rækker???
Avatar billede eagleeye Praktikant
22. oktober 2001 - 19:39 #29
Jeg har \"lånt\" dine 6 rækker fra formularfilen. Og de hedder dato1, dato2, dato3 ovs.
Den her hendter dato(i)
outStr = Request.Form(\"dato\" & i)
Så der skal ikke laves om i formularfilen.

Der laves en fil med op til 6 linier. Hvis der ikke  er tastet noget ind så gemmes der ikke en tom linie. Hvis man kun indtaster i de 4 rækker komme der kun 4 linier i filen.


eks på filen:
10-10-01,23,E,234,Spise ude,0,200,0,0
10-10-01,24,F,235,El regning,0,0,0,2300

Hvordan havde du tænkt kommetal skulle indtastes?
eksvis 22,5
Avatar billede webbe Nybegynder
23. oktober 2001 - 07:49 #30
eagleeye:

Det var faktisk et godt spørgsmål.....ved ikke hvordan det står i Concorde, men kunne forestille mig, at det er med komma (,).
Avatar billede eagleeye Praktikant
23. oktober 2001 - 08:09 #31
Kan man selv bestemme hvilket skille tegn der skal være ?

Så kunne man måske benytte ; eller noget andet
Avatar billede webbe Nybegynder
23. oktober 2001 - 08:17 #32
eagleye:

Det ved jeg ikke - kommer vel an på hvordan Concorde har det med at importere filer! ;0)

Har lige implementeret din kode og skal til at test!
Avatar billede eagleeye Praktikant
23. oktober 2001 - 08:22 #33
ok. Jeg kender ikke lige Concordes import function.
Men de fleste eksvis excel kan man angive et skille-tegn i en \"komma\"-fil
Avatar billede webbe Nybegynder
23. oktober 2001 - 08:23 #34
eagleeye:

Har lige testet og det virker nogenlunde.

Den danner rigtigt nok en fil med det rigtige navn, men indholdet af filen ser forkert ud....den tager kun det sidste felt med i linien af input felter.

Resultatet i filen ser således ud:

2000
0
0
0
0
0

Jeg vil gerne hvis den slet ikke skriver noget hvis felterne er tomme, samt at den tager alle informationerne med! ;0)
Avatar billede webbe Nybegynder
23. oktober 2001 - 08:28 #35
Den tager kun feltet \"bank_ud\" med! ;0)
Avatar billede eagleeye Praktikant
23. oktober 2001 - 08:42 #36
?? har du lavet om i navne på felterne
Avatar billede eagleeye Praktikant
23. oktober 2001 - 08:44 #37
har du lavet om i save1.asp ??
jeg tænker på disse linie:

outStr = outStr & Request.Form(\"konto\" & i) & \",\"
Avatar billede webbe Nybegynder
23. oktober 2001 - 08:49 #38
eagleeye:

Nope....har skrevet det som du har lavet det...hele min save1.asp ser sådan ud:

<%
Set Connect = Server.CreateObject(\"ADODB.Connection\")
Connect.Open \"revisor\"

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

sql = \"INSERT INTO Data (Kundenr, Dato, Bilag, T, Konto, Tekst, Kasse_ind, Kasse_ud, Bank_ind, Bank_ud) VALUES (\"&\"\'\"&Request.Form(\"kundenr\")&\"\', \'\"&Request.Form(\"dato1\")&\"\', \'\"&Request.Form(\"bilag1\")&\"\', \'\"&Request.Form(\"t1\")&\"\', \'\"&Request.Form(\"konto1\")&\"\', \'\"&Request.Form(\"tekst1\")&\"\', \'\"&Request.Form(\"kasse_ind1\")&\"\', \'\"&Request.Form(\"kasse_ud1\")&\"\', \'\"&Request.Form(\"bank_ind1\")&\"\', \'\"&Request.Form(\"bank_ud1\")&\"\')\"
Connect.Execute(sql)

\'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(fileName))
    fileName = Session(\"Kundenr\")&\"(\"&i&\")\"&filEfternavn
    i = i + 1
loop
Set objTextStream = objFSO.CreateTextFile(Server.MapPath(\"\"&fileName))

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

objTextStream.Close
Set objTextStream = Nothing
Set objSFO = Nothing

Connect.Close
Set Connect = Nothing

Response.Redirect(\"confirm.asp\")
%>
Avatar billede eagleeye Praktikant
23. oktober 2001 - 08:50 #39
ikke helt for i = 1 to 6 skal være sådan her.
Det er derfor du kun får det sidste felt med:

\'Udskriv til filen linie for linie.
for i = 1 to 6 
  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 <> \",,,,,0,0,0,0\" then 
    objTextStream.WriteLine outStr
    Response.Write \"Linie \"&i& \" skrevet til filen : \" & outStr & \"<br>\"
  end if
next
Avatar billede eagleeye Praktikant
23. oktober 2001 - 08:51 #40
du behøver ikke

Response.Write \"Linie \"&i& \" skrevet til filen : \" & outStr & \"<br>\"
 

den havde jeg med som test...
Avatar billede webbe Nybegynder
23. oktober 2001 - 08:58 #41
eagleeye:

Hmmm - tror jeg trænger til nye briller! *GG*

Nu er det bare perfekt.....skal bare have rettet den mappe til hvor tekstfilen kommer til at ligge!
Avatar billede webbe Nybegynder
23. oktober 2001 - 09:01 #42
eagleeye:

Hvordan skal mine Server.MapPath se ud når tekstfilerne skal ligge i en mappe der hedder \"Concorde\"???

Mappestrukturen er

ROD
  -Concorde
  -Images

Min save1.asp ligger i roden!
Avatar billede eagleeye Praktikant
23. oktober 2001 - 09:07 #43
Server.Mappath(\"/Concorde/\"&fileName)
Avatar billede webbe Nybegynder
23. oktober 2001 - 09:09 #44
eagleeye:

Tak for det du.....du har virkelig fortjent pointene!

Det virker bare perfekt!
Avatar billede webbe Nybegynder
23. oktober 2001 - 09:12 #45
eagleeye:

Hovsa...den ligger stadig i samme mappe (roden)!!!

Har gjort følgende:

Linie 20
do while objFSO.FileExists(Server.MapPath(\"/concorde/\"&fileName))

Linie 24
Set objTextStream = objFSO.CreateTextFile(Server.MapPath(\"/concorde/\"&fileName))

og nu melder den fejl i linie 24 (Path not found!)
Avatar billede webbe Nybegynder
23. oktober 2001 - 09:28 #46
eagleeye:

Har fundet ud af det....skulle bare være:

Linie 24
Set objTextStream = objFSO.CreateTextFile(Server.MapPath(\"./concorde/\"&fileName))

Avatar billede eagleeye Praktikant
23. oktober 2001 - 10:22 #47
Ok
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