Toon posts:

[ASP/VBScript] export naar csv

Pagina: 1
Acties:
  • 159 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo

Ik zit met volgend probleem; Ik exporteer mijn tabellen vanuit SQL server naar een csv-file. Alles gaat perfect tot ik in een veld van mijn tabel kom waarin er een enter is gebruikt. Bv. Memoveldje dat verschillende regels bevat.

Hij neemt die enter mee over naar de csv en hij gaat dus in die csv ook naar een nieuwe regel dan. Hij mag pas naar een nieuwe regel gaan als hij heel de rij heeft gelezen.

Weet er iemand hoe ik die enters (control characters) er op één of andere manier kan uithalen?

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Dan moet je een Replace doen op die regel dmv een dummycode, en later bij het importeren deze dummy code weer vervangen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Sorry, ik denk dat ik het niet helemaal begrijp wat je bedoelt.

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 26 april 2004 @ 16:26:
Sorry, ik denk dat ik het niet helemaal begrijp wat je bedoelt.
Bij het aanmaken van de CSV

Replace(veldnaam,VbCrLf,"<DummyCode>")

Bij het invoeren in de database

Replace(veldnaam,"<DummyCode>",VbCrLf)

[ Voor 8% gewijzigd door gorgi_19 op 26-04-2004 16:27 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok, thx! Ik ga het ineens uitproberen.

Verwijderd

Topicstarter
Ok, een volgend probleem. Iets dat ik me vanmorgen ook al afgevraagd had en geen oplossing op wist.

Naar een volgende rij springen in een recordset is gemakkelijk, maar kan je ook in één rij naar een veld in de volgende kolom springen zonder de naam van de kolom te gebruiken. Want ik zou graag een procedure maken die voor alle tabellen kan gelden. Een soort van MoveNext om naar het volgende veld in een rij te springen. Ik zou graag alle veldjes ineens controleren of er een "enter" inzit.

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 26 april 2004 @ 16:40:
Ok, een volgend probleem. Iets dat ik me vanmorgen ook al afgevraagd had en geen oplossing op wist.

Naar een volgende rij springen in een recordset is gemakkelijk, maar kan je ook in één rij naar een veld in de volgende kolom springen zonder de naam van de kolom te gebruiken. Want ik zou graag een procedure maken die voor alle tabellen kan gelden. Een soort van MoveNext om naar het volgende veld in een rij te springen. Ik zou graag alle veldjes ineens controleren of er een "enter" inzit.
:?

Je gaat toch zowel de columns als de rows uitlezen in een for-loopje, mag ik aannemen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Verwijderd schreef op 26 april 2004 @ 16:40:
Ok, een volgend probleem. Iets dat ik me vanmorgen ook al afgevraagd had en geen oplossing op wist.

Naar een volgende rij springen in een recordset is gemakkelijk, maar kan je ook in één rij naar een veld in de volgende kolom springen zonder de naam van de kolom te gebruiken. Want ik zou graag een procedure maken die voor alle tabellen kan gelden. Een soort van MoveNext om naar het volgende veld in een rij te springen. Ik zou graag alle veldjes ineens controleren of er een "enter" inzit.
je kunt toch met een for lus alle fields in het huidige record afgaan ?

code:
1
2
3
4
5
  dim fld

  for each fld in rs.fields
    ' Controleer hier of er een enter in fld.value zit
  next

Verwijderd

Topicstarter
euhm ja...

Misschien denk ik gewoon verkeerd hoor. Maar je leest toch altijd je records en je gaat over naar een volgend record met MoveNext. En als ik dan een bepaalt veld wil gebruiken in die rij, dan vraag je dat meestal toch op met rst.fields("veldnaam").

Maar iedere keer die veldnaam ingeven, da zie'k ni zitten. Ik vroeg me dus af of je zo ineens naar een volgende kolom kan gaan op één of andere manier.

'k Hoop da'k een beetje duidelijk ben, want kan er zelf al maar amper aan uit. :?

Verwijderd

Topicstarter
ah, ok, dat wist ik dus niet...

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Maar iedere keer die veldnaam ingeven, da zie'k ni zitten. Ik vroeg me dus af of je zo ineens naar een volgende kolom kan gaan op één of andere manier.
Dat hoeft dus niet. Als ik me goed herinner, is de Fields Collectie een array, welke dus ook een index heeft
rst.Fields(0) moet dus ook kunnen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
jeuj, nu krijg ik weer een leuke error ;


Microsoft VBScript compilation error '800a0414'

Cannot use parentheses when calling a Sub

/export/domain.asp, line 39

Replace(fld,VbCrLf,"")
----------------------^

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Klopt, de functie was niet helemaal compleet. Ik heb niet alles voorgekauwd.

Zie oa http://www.w3schools.com/vbscript/func_replace.asp

[ Voor 29% gewijzigd door gorgi_19 op 26-04-2004 17:03 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik had ze al opgezocht hoor;

Replace(expression,find,replacewith[,start[,count[compare]]])
Replaces the designated substring find with the substring replacewith the designated number of times.

Example: Replace("Hi there!","Hi","Hello") -> Hello there!

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Ja, maar je zult de returnwaarde waarschijnlijk ook nog wel in een variabele willen opslaan.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik zal is eerst zien of ik eruit geraak. Normaal gezien moet dat wel lukken met deze info.

  • party42
  • Registratie: Oktober 2000
  • Laatst online: 13:51
gorgi_19 schreef op 26 april 2004 @ 17:04:
Ja, maar je zult de returnwaarde waarschijnlijk ook nog wel in een variabele willen opslaan.
:)

hehe, misschien moet je het niet te moeilijk maken...

code:
1
2
dim result
result = Replace("Hi there!","Hi","Hello")

Everyday's an endless stream, of cigarettes and magazines...


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

party42 schreef op 26 april 2004 @ 23:28:
hehe, misschien moet je het niet te moeilijk maken...

code:
1
2
dim result
result = Replace("Hi there!","Hi","Hello")
Mja, om het nu helemaal te gaan voorkauwen, vond ik ook weer iets te.. :+

[ Voor 9% gewijzigd door gorgi_19 op 26-04-2004 23:29 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 13:51
ach, een Replace functie "voorkauwen". Vond het te simpel om niet even te zeggen zegmaark... :)

Anders zoeken mensen zich een ongans (je vindt toch alleen maar syntax benadering) en dit is makkelijker dan nog 5 posts doorgaan met het "hem" laten raden naar de correcte benadering... ;)

Everyday's an endless stream, of cigarettes and magazines...


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

party42 schreef op 26 april 2004 @ 23:32:
Anders zoeken mensen zich een ongans (je vindt toch alleen maar syntax benadering) en dit is makkelijker dan nog 5 posts doorgaan met het "hem" laten raden naar de correcte benadering... ;)
Mijn idee er achter.. Hij vergeet dit stukje basiskennis dan nooit, maar dan ook nooit meer.. :) :P 'k heb namelijk het idee dat de TS nogal wat basiskennis mist; en om dan dingen te gaan voorkauwen... :)

Maar ik ben wel benieuwd of de TS er nu onderhand wel uit is of niet.

[ Voor 25% gewijzigd door gorgi_19 op 26-04-2004 23:42 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • party42
  • Registratie: Oktober 2000
  • Laatst online: 13:51
ik ook

opzich ben ik het wel met je een trouwens hoor. Ik bedoel, geef mensen water en ze kunnen drinken, geef mensen een put en ze klagen nooit meer.

Maarja, aan de stagebegeleiding die ik heb gedaan heb ik wel gezien dat je soms ook antwoorden moet geven. Hoe "tegenstrijdig" dat soms ook klinkt. Ik ben er ook allemaal zelf achter gekomen, waarom kunnen zei dat dan niet...

Everyday's an endless stream, of cigarettes and magazines...


Verwijderd

Topicstarter
'k heb het nog gevonden gisteren hoor. Zoiets is het uiteindelijk geworden. Had nog wat last met null-waarden. Daarop werkt die Replace niet, dus moest ik die er op één of andere manier nog uitfilteren.

Nu de talrijke if'kes nog wegwerken en controleren of ik niets vergeten ben. :-)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub writeToCSV(RS) 
    
    'kolomnamen 
    For i = 0 To RS.Fields.Count-1
        If i = (RS.Fields.Count - 1) Then
            Response.Write lcase(RS.Fields(i).Name)             
        Else
            Response.Write lcase(RS.Fields(i).Name) & ";"       
        End If 
    Next
    
    Response.write vbNewLine
    Response.write vbNewLine
    
    'waarden
    While Not RS.eof
        For u=0 to RS.Fields.Count - 1
            If u = (RS.Fields.Count - 1) then
                If instr(RS.Fields(u),vbCrLf) <> 0 Then
                    Response.Write Replace(RS.Fields(u).Value,VbCrLf,"")        
                Else 
                    Response.Write lcase(RS.Fields(u).Value)
                End If
            Else
                If instr(RS.Fields(u),vbCrLf) <> 0 Then
                    Response.Write Replace(RS.Fields(u).Value,VbCrLf,"") & ";"
                Else 
                    If IsNull(RS.Fields(u).Value) Then 
                        Response.Write "" & ";"
                    Else
                        Response.Write lcase(RS.Fields(u).Value)& ";"
                    End if
                End If
            End If 
        Next
        
        Response.Write vbNewLine
        
        RS.MoveNext
    Wend
    
    Response.write vbNewLine
    Response.write vbNewLine
    
End Sub


Ik ontbreek wel wat basiskennis als het op programmatie aankomt. Daar ben ik mezelf genoeg van bewust. Misschien logisch als je voor systeem- en netwerkbeheer hebt gekozen en je nog maar enkele weken met ASP bezig bent. Maar je moet het op één of andere manier leren en we doen ons best é...

[ Voor 9% gewijzigd door Verwijderd op 27-04-2004 09:46 ]


Verwijderd

De controle met IsNull kun je wegwerken met een truukje....Als je Rs.fields(x).value & "" Gebruikt, worden Null values automatisch omgezet naar een lege string.

Verwijderd

Topicstarter
Thx!

Verwijderd

volgens mij kan je code ietsjes kleiner....

Hier het loopje voor de data, de headers mag je zelf doen.

Visual Basic:
1
2
3
4
5
6
7
8
9
Do while not rs.eof
  Regel = ""
  For i = 1 to rs.fields.count - 1
    Regel = Regel & Replace(rs.fields(i).value & "",VBCrLf," ") & ";"
  Next
  Regel = LCase(left(Regel,len(Regel)-1)) ' Laatste ; eraf
  Response.write Regel
  rs.movenext
loop


[edit]Deze code is uit mijn blote hoofd geschreven, er kunnen dus wat syntacfoutjes in zitten. maar de strekking is volgens mij wel duidelijk.

[ Voor 24% gewijzigd door Verwijderd op 27-04-2004 10:45 ]


Verwijderd

Topicstarter
'k ga nog iets met die replace moeten doen, want heb gemerkt dat er een veld is met een TAB en dat geeft een soortgelijk probleem als met die VBCrLf.

En heb ook nog Chr(34) overal rond gezet moest er ergens in een veldje een ; gebruikt worden.

De UID in de verschillende tabellen moet ook opgezocht worden en vervangen worden door "naam + voornaam"

...

'k Heb nog wel wa werk dus. :)

[ Voor 45% gewijzigd door Verwijderd op 27-04-2004 11:32 ]

Pagina: 1