Zum Inhalt springen

csv to Html (Inhalte übernehmen) unter VB 05


Gateway_man

Empfohlene Beiträge

hallo leute hab sitz hier gerade voll auf der Leitung. habe eine csv datei in der Datenabgespeichert sind die mit einem semikolon getrennt sind. Das einlesen klappt schon allerdings funktioniert das schreiben in die Html nicht ganz so wie es soll. habe in der Html einen eintrag getätigt (<!start line>) damit ich unter vb diesen als Delimiter benutzten kann, sodass das Programm weiß wo es die Daten einfügen soll. Desweiteren gibts es in der Html 5 Spalten die wie folgt heißen:

-Markt

-PLZ

-Ort

-Strasse

-Telefon

So jetzt poste ich nochmal schnell den quelltext :


Imports System

Imports System.IO

Imports System.Collections





Public Class Form1


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim sLine As String = ""

        Dim objReader As New StreamReader("****Pfad der eingelesenen csv Datei****")

        Dim Kopf As String

        Dim file As System.IO.StreamWriter

        Dim start As String

        start = "<!start line>"



        Kopf = objReader.ReadLine

        sLine = objReader.ReadToEnd()


        Dim lines() As String

        Dim fields() As String

        Dim htmlParts() As String

        Dim i As Double


        fields = Split(Kopf, ";")

        lines = Split(sLine, vbCrLf)


        For i = 0 To UBound(fields)

            ListBox1.Items.Add(Trim(fields(i)))

        Next


        objReader.Close()


        TextBox1.Text = sLine


        Dim startline As String



        file = My.Computer.FileSystem.OpenTextFileWriter("****Pfad****", True)

        startline = objReader.ReadLine

        htmlParts = Split(startline, start)

        For i = 0 To UBound(htmlParts)

            file.WriteLine(htmlParts(i) + "------")

        Next

        file.Close()






    End Sub

Ich weiß isn bisschen undurchsichtig da man die beiden Dateien jetzt nich kennt aber würd mich trotzdem um jeden produktiven Gedanken freuen.

Ich denke ich muss alle 5 spalten spliten aber irgendwie hab ich jetzt grad keinen klaren Kopf mehr. (is ja doch schon n bisschen spät)

Mfg

Simon

Link zu diesem Kommentar
Auf anderen Seiten teilen

sofern es euch hilft die ganze sache besser zu verstehen, habe ich hier das selbe Programm, nur geschrieben in power Basic, wo ich die syntax nicht verstehe :-D und dieses soll jetzt in visual Basic neu geschrieben erstellt werden.


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'   file       csv2html.bas

'   funktion   csv daten in html Tabelle einlesen und html file erstellen

'   inputs     html template    ( recruter.htm )

'              csv Data file    ( maerkte.csv )

'   outputs    html mit Tabelle ( personal.htm )

'              error/log file   ( csv2html.log )


#DIM ALL

#COMPILE EXE

#REGISTER NONE

#OPTION VERSION4

#INCLUDE "win32api.inc"



'' Konstanten

$fnTemplate = "recruter.htm"

$fnCsvData  = "maerkte.csv"

$fnHTMLout  = "personal.htm"

$fnError    = "csv2html.log"


$TagStart   = "<!start line>"

$TagEnd     = "<!end line>"




FUNCTION FileExists(BYVAL filename AS STRING) AS LONG

    ON ERROR RESUME NEXT

    FUNCTION = (DIR$(filename) > "")

END FUNCTION




FUNCTION logfile ( BYVAL sMsg AS STRING ) AS LONG


    LOCAL hFile AS LONG

    ON ERROR GOTO logfile_err


    hFile = FREEFILE


    OPEN $fnError FOR APPEND AS hfile

    PRINT #hfile, sMsg & $CRLF

    CLOSE #hfile


    FUNCTION = %true

    EXIT FUNCTION


logfile_err:

    CLOSE hfile

END FUNCTION



FUNCTION readTemplate() AS STRING


    LOCAL hFile AS LONG

    LOCAL sTemp AS STRING


    IF ISFALSE FileExists( $fnTemplate ) THEN

       logfile( "Folgende Datei fehlt: " & $fnTemplate )

       EXIT FUNCTION

    END IF


    hFile = FREEFILE

    OPEN $fnTemplate FOR BINARY AS #hFile

    GET$ #hFile , LOF(#hFile), sTemp       'copy file into string

    CLOSE #hFile


'''' steuer tags vorhanden ?

    IF INSTR( sTemp, $TagStart ) = 0 THEN

       logfile( "Der Steuer Tag " & $TagStart & " fehlt in der Datei : " & $fnTemplate )

       EXIT FUNCTION

    END IF

    IF INSTR( sTemp, $TagEnd ) = 0 THEN

       logfile( "Der Steuer Tag " & $TagEnd & " fehlt in der Datei : " & $fnTemplate )

       EXIT FUNCTION

    END IF


    FUNCTION = sTemp

END FUNCTION




FUNCTION readCSV() AS STRING


    LOCAL hFile AS LONG

    LOCAL sTemp AS STRING


    IF ISFALSE FileExists( $fnCsvData ) THEN

       logfile( "Folgende Datei fehlt: " & $fnCsvData )

       EXIT FUNCTION

    END IF


    hFile = FREEFILE

    OPEN $fnCsvData FOR BINARY AS #hFile

    GET$ #hFile , LOF(#hFile), sTemp       'copy file into string

    CLOSE #hFile


'''' feld definitionen vorhanden ?

    IF PARSECOUNT(sTemp, ";") = 0 THEN

       logfile( "Die Datei : " & $fnCsvData  & " hat das falsche Format." )

       EXIT FUNCTION

    END IF


    FUNCTION = sTemp

END FUNCTION




SUB splitTemplate( sTemp AS STRING, sKopf AS STRING, sFuss AS STRING, sFlds AS STRING )

    LOCAL iStart  AS INTEGER

    LOCAL iLength AS INTEGER


    sKopf   = EXTRACT$(sTemp, $TagStart)

    sFuss   = REMAIN$(sTemp, $TagEnd)

    iStart  = LEN(sKopf)+ LEN($TagStart)+1

    iLength = LEN(sTemp)-iStart-LEN(sFuss)-LEN($TagEnd)

    sFlds   = LCASE$( MID$(sTemp,iStart,iLength) )         ''' für feldnamen array


END SUB


FUNCTION WINMAIN ( BYVAL hInstance   AS DWORD,      BYVAL hPrevInst AS DWORD, _

                   BYVAL lpszCmdLine AS ASCIIZ PTR, BYVAL nCmdShow  AS LONG ) AS LONG


    LOCAL i        AS INTEGER

    LOCAL lines    AS INTEGER

    LOCAL curLine  AS INTEGER

    LOCAL fldCount AS INTEGER


    LOCAL hFile AS LONG


    LOCAL sTemp AS STRING

    LOCAL sKopf AS STRING

    LOCAL sFuss AS STRING

    LOCAL sFlds AS STRING

    LOCAL sNew  AS STRING

    LOCAL sOut  AS STRING

    LOCAL sLine AS STRING



    sTemp = readTemplate()                        ''' Quelldaten lesen & validieren

    IF LEN(sTemp) = 0 THEN EXIT FUNCTION

    splitTemplate sTemp, sKopf, sFuss, sFlds


    sTemp = readCSV()

    IF LEN(sTemp) = 0 THEN EXIT FUNCTION


    lines = PARSECOUNT(sTemp, $CRLF)              ''' zeilen der csv Datei zählen

    sLine = PARSE$(sTemp, $CRLF,1)                ''' Kopfzeile auslesen


    fldCount = PARSECOUNT(sLine, ";")             ''' Felder der Kopfzeile zählen

    DIM flsLst(fldCount) AS LOCAL STRING          ''' array mit feldnamen füllen


    FOR i = 1 TO fldCount

        flsLst(i) = LCASE$(PARSE$(sLine, ";", i)) ''' lcase wegen lcase(sFlds)

    NEXT i


    FOR curLine = 2 TO lines

        sLine = PARSE$(sTemp, $CRLF,curLine)      ''' datenzeile auslesen

        sNew  = sFlds                             ''' Arbeitsstring mit HTML FeldIDs

        FOR i = 1 TO fldCount

            REPLACE  "--"+flsLst(i)+"--" WITH PARSE$(sLine, ";", i) IN sNew

        NEXT i

        sOut = sOut + sNew

    NEXT


    hFile = FREEFILE                              ''' zieldaten speichern

    OPEN $fnHTMLout FOR OUTPUT AS #hFile

    PRINT #hFile , sKopf + sOut + sFuss

    CLOSE #hFile

    logfile( "Datei " & $fnHTMLout & " neu am: " & _

             TIME$ & DATE$ & " Records: " + STR$(lines) )


END FUNCTION

Link zu diesem Kommentar
Auf anderen Seiten teilen

bin jetzt fast fertig weiß nur nich wie ich die replace funktion in visual Basic so nutze wie es in dem power basic scirpt benutzt wurde und msdn ist nich gerade hilfreich. Es handelt sich um folgende codebereich (die Zeile die ich unterstrichen habe wird mir als syntax fehler gewertet) :


For curLine = 2 To lines

        sLine = PARSE$(sTemp, vbCRLF, curLine)      ''' datenzeile auslesen

        sNew = sFlds                             ''' Arbeitsstring mit HTML FeldIDs

        For i = 1 To fldCount

           [U] REPLACE  "--"+flsLst(i)+"--" WITH PARSE$(sLine, ";", i) IN sNew[/U]

        Next i

        sOut = sOut + sNew

    Next

wäre wie immer unendlich dankbar ;-)

lg

simon

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...