Avatar billede m_smiszek Nybegynder
28. august 2007 - 14:40 Der er 20 kommentarer

text fra løkker til mssql

Hej Alle,

Jeg sidder og kæmper med at læse 3 forskellige linjer i forskellige .txt dokumenter.

Jeg har fået den til at læse de forskellige linjer, men jeg kunne godt tænke mig at smide de 3 linjer ind i en dertil indrettet tabel i en mssql database.

Det er muligvis noget værrere spagethi kode, men er ret "rusten" til vb.net

altså, Pin - Phone - Message, skal ind i min mssql database. i samme tabel.

Jeg har prøvet noget forskelligt, men jeg rammer hovedet mod muren fordi jeg har alle de løkker, og fordi jeg faktisk er ret ny i vb.net.

På forhånd mange tak - her kommer koden:

Imports System.IO
Module Module1
    Sub Main()
        Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("C:\testmails")
        Dim fiArr As System.IO.FileInfo() = di.GetFiles("*.txt")
        For Each fi As System.IO.FileInfo In fiArr
            Using sr As IO.StreamReader = New IO.StreamReader(fi.FullName)
                Dim line As String
                While (sr.Peek() <> -1)
                    line = sr.ReadLine()
                    If (line.StartsWith("Pin:")) Then
                        line = line.Replace("Pin: ", "")
                        MsgBox(line)
                        Console.WriteLine(line) ' Her skal skrives til databasen istedet.
                        Exit While
                    End If
                End While
            End Using
            Using sr As IO.StreamReader = New IO.StreamReader(fi.FullName)
                Dim line As String
                While (sr.Peek() <> -1)
                    line = sr.ReadLine()
                    If (line.StartsWith("Phone:")) Then
                        line = line.Replace("Phone: ", "")
                        MsgBox(line)
                        Console.WriteLine(line) ' Her skal skrives til databasen istedet.
                        Exit While
                    End If
                End While
            End Using
            Using sr As IO.StreamReader = New IO.StreamReader(fi.FullName)
                Dim line As String
                While (sr.Peek() <> -1)
                    line = sr.ReadLine()
                    If (line.StartsWith("Message:")) Then
                        line = line.Replace("Message: ", "")
                        MsgBox(line)
                        Console.WriteLine(line) ' Her skal skrives til databasen istedet.
                        Exit While
                    End If
                End While
            End Using
        Next
    End Sub
End Module
Avatar billede arne_v Ekspert
29. august 2007 - 04:01 #1
Måske noget a la:

        Dim sr As StreamReader = New StreamReader("C:\data.txt")
        Dim line As String
        Dim pin As String = "NULL"
        Dim phone As String = "NULL"
        Dim message As String = ""
        line = sr.ReadLine
        While line <> Nothing
            If line.StartsWith("Pin: ") Then
                pin = line.Substring("Pin: ".Length)
            End If
            If line.StartsWith("Phone: ") Then
                phone = line.Substring("Phone: ".Length)
            End If
            If line.StartsWith("Message: ") Then
                message = line.Substring("Message: ".Length)
            End If
            line = sr.ReadLine
        End While
        sr.Close()
        Dim sqlstr As String
        sqlstr = "INSERT INTO tab VALUES (" & pin & "," & phone & ",'" & message & "')"
        MessageBox.Show(sqlstr)
Avatar billede m_smiszek Nybegynder
29. august 2007 - 09:38 #2
Hmm, umiddelbart giver den mig outputtet = INSERT INTO tab VALUES (NULL, NULL,")
Avatar billede nielle Nybegynder
29. august 2007 - 09:53 #3
Det lyder som om at der ikke er nogen "Pin: "-linje eller "Phone: "-linje i den pågældene fil...

Et spørgsmål: Du har en masse tekstfiler - er der kun en kontakt/person i hver, eller kan der være mere end en i en given tekst-fil?
Avatar billede m_smiszek Nybegynder
29. august 2007 - 10:09 #4
Der vil kun være en i hver..

jeg fik det til at virke lidt, dog driller det med gevaldigt... at den køre alle igennem og giver null, i de filer der ikke er nogen, der burde den bare ikke skrive...
Avatar billede m_smiszek Nybegynder
29. august 2007 - 11:27 #5
Jeg fandt en workaround.

Imports System.IO
Module Module1
    Sub Main()
        Dim di As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("C:\testmails")
        Dim fiArr As System.IO.FileInfo() = di.GetFiles("*.txt")
        For Each fi As System.IO.FileInfo In fiArr
            Using sr As IO.StreamReader = New IO.StreamReader(fi.FullName)
                Dim line As String
                Dim pin As String = "NULL"
                Dim phone As String = "NULL"
                Dim message As String = ""
                line = sr.ReadLine
                While (sr.Peek() <> -1)
                    If line.StartsWith("Pin: ") Then
                        pin = line.Substring("Pin: ".Length)
                    End If
                    If line.StartsWith("Phone: ") Then
                        phone = line.Substring("Phone: ".Length)
                    End If
                    If line.StartsWith("Message: ") Then
                        message = line.Substring("Message: ".Length)
                    End If
                    line = sr.ReadLine
                End While
                sr.Close()
                If pin = "NULL" Then

                ElseIf phone = "NULL" Then

                ElseIf message = "NULL" Then

                Else
                    Dim sqlstr As String
                    sqlstr = "INSERT INTO tab VALUES (" & pin & "," & phone & ",'" & message & "')"
                    MsgBox(sqlstr)
                End If
            End Using
        Next
    End Sub
End Module
Avatar billede m_smiszek Nybegynder
29. august 2007 - 11:28 #6
her vil den kun indsætte værdier der er brugbare.
Avatar billede nielle Nybegynder
29. august 2007 - 11:31 #7
Der skal skam skrives NULL i databasen der hvor der ikke er værdier.
Avatar billede m_smiszek Nybegynder
29. august 2007 - 11:31 #8
Er det på nogen somhelst måde muligt at få den til at kopiere de filer den har læst til et andet bibletek, hvorefter den skal slette filerne i dette biblotek ?
Avatar billede nielle Nybegynder
29. august 2007 - 11:34 #9
Brug Move()-metoden på dine FileInfo-objekter.
Avatar billede m_smiszek Nybegynder
29. august 2007 - 11:34 #10
Jeg er ikke intresseret i at få skrevet noget i databasen hvis bare en af linjerne er null..
Avatar billede m_smiszek Nybegynder
29. august 2007 - 11:35 #11
Move(), jeg prøver lige engang... er dog ikke sikker på udfaldet, hehe
Avatar billede nielle Nybegynder
29. august 2007 - 11:36 #12
Så lader du da bare være:

If pin<>"NULL" And phone<>"NULL" And message<>"NULL" Then
    sqlstr = "INSERT INTO tab VALUES (" & pin & "," & phone & ",'" & message & "')"
    ' og så lidt mere database logik her...
End If
Avatar billede nielle Nybegynder
29. august 2007 - 11:38 #13
MoveTo - ikke Move.
Avatar billede m_smiszek Nybegynder
29. august 2007 - 11:43 #14
Hmm, den driller mig den moveto, har du et eksempel ?
Avatar billede nielle Nybegynder
29. august 2007 - 11:59 #15
Dim filNavn As String = fi.Name
Dim nyFilPath As String = Path.Combine("C:\\nytDir\\nytUnderDir", filNavn)
fi.MoveTo(nyFilPath)
Avatar billede m_smiszek Nybegynder
29. august 2007 - 12:15 #16
SMUKT !
Avatar billede m_smiszek Nybegynder
29. august 2007 - 12:16 #17
Hvordan er det hvis man vil have den til at starte et andet program samtidig med man køre dette ?
Avatar billede nielle Nybegynder
29. august 2007 - 13:22 #18
Kig på Process klassen
Avatar billede nielle Nybegynder
11. september 2007 - 12:53 #19
Har du fået det til at virke?
Avatar billede nielle Nybegynder
07. oktober 2007 - 11:29 #20
??
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