Gateway_man Geschrieben 19. Januar 2009 Geschrieben 19. Januar 2009 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 Zitieren
Amstelchen Geschrieben 19. Januar 2009 Geschrieben 19. Januar 2009 versteh ich nicht ... was willst du im endeffekt herausbekommen, HTML? wenn du tabellarische daten wie CSV hast, wirst du das in HTML als tabelle darstellen wollen, oder täusche ich mich? ist das ASP.NET, wovon du sprichst bzw. womit du arbeitest? s'Amstel Zitieren
Gateway_man Geschrieben 19. Januar 2009 Autor Geschrieben 19. Januar 2009 ja eine html datei die die daten der csv hat. ja die html ist tabellarisch und ich will ein script schreiben sodass wenn ich die csv verändere nur die exe starte und es wird automatisch aktuallisisert. Ich benutze wie oben im thread name schon genannt visual Basic 2005. lg simon Zitieren
Gateway_man Geschrieben 20. Januar 2009 Autor Geschrieben 20. Januar 2009 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 Zitieren
Gateway_man Geschrieben 20. Januar 2009 Autor Geschrieben 20. Januar 2009 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 Zitieren
Empfohlene Beiträge
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.