Pagina 1 di 1

VB.net: aiuto e dubbi[RISOLTO]

Inviato: lunedì 15 giugno 2015, 13:02
da Chry1991
Salve amici

allora ho una problematica che mi si verifica unatantum su dei file xml che non sono di mia appartenenza ma mi vengono ricevuti da grandi società.
Questi file mi servono per importare dati sul db tramite un eseguibile x windows che importa i dati nel db.
Solo che in questi file ogni tanto appaiono caratteri ascii ed il codice scritto dai miei colleghi di lavoro non intercetta questi caratteri.
Allora sto cercando di fare un eseguibile che ricompila i fogli xml e che li riscriva eliminando sti caratteri ascii ma sono ad un punto fermo e siccome x me il linguaggio è nuovo chiedo a voi una mano su come sistemare il codice
posto il codice

Codice: Seleziona tutto

Imports System.Xml
Imports System.IO

Public Class Form1

    Dim myFileDlog As New Windows.Forms.OpenFileDialog()
    Dim filepath As String
    Dim ascii(255) As String
    

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_1.Click

        ProgressBar1.Minimum = 0
        ProgressBar1.Maximum = 5
        ProgressBar1.Value = 0

        'look for files in the c drive
        myFileDlog.InitialDirectory = "c:\"

        'specifies what type of data files to look for
        myFileDlog.Filter = "All Files (*.*)|*.*" & _
            "|File Xml (*.xml)|*.xml"

        'specifies which data type is focused on start up
        myFileDlog.FilterIndex = 2

        'Gets or sets a value indicating whether the dialog box restores the current directory before closing.
        myFileDlog.RestoreDirectory = True

        'seperates message outputs for files found or not found
        If myFileDlog.ShowDialog() = _
            Windows.Forms.DialogResult.OK Then
            If Dir(myFileDlog.FileName) <> "" Then
                MsgBox("File Exists: " & _
                       myFileDlog.FileName, _
                       MsgBoxStyle.Information)
            Else
                MsgBox("File Not Found", _
                       MsgBoxStyle.Critical)
            End If
        End If

        'Adds the file directory to the text box
        TextBox1.Text = myFileDlog.FileName

        'carichiamo la stringa nella textbox se il file è stato scelto'
        TextBox2.Enabled = False
        TextBox2.Text = " nessun file caricato "
        If (TextBox1.Text <> "") Then
            TextBox2.Text = " caricato il file di conversione"
        End If
    End Sub

    Public Function LoadXMLDoc() As XmlDocument
        Dim xdoc As XmlDocument
        Dim lnum As Long
        'Dim pos As Long'
        'Dim Newxml As String'
        Try
            xdoc = New XmlDocument()
            xdoc.Load(filepath)
        Catch ex As XmlException
            'MessageBox.Show(ex.Message)
            lnum = ex.LineNumber
            ReplaceSpecialChars(lnum)

            xdoc = LoadXMLDoc()

        End Try
        Return (xdoc)
    End Function

   
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        filepath = myFileDlog.FileName
        Dim xmldoc As New XmlDocument()
        Dim num As New Long()
        xmldoc = LoadXMLDoc()
    End Sub

    Private Sub ReplaceSpecialChars(ByVal linenumber As Long)
        Dim strm As StreamReader
        Dim strline As String
        Dim strreplace As String = " "

        Dim tempfile As String = "C:\temp.xml"
        Try
            FileCopy(filepath, tempfile)
        Catch ex As Exception

        End Try

        Dim strmwriter As New StreamWriter(filepath)
        strmwriter.AutoFlush = True
        strm = New StreamReader(tempfile)

        Dim i As Long = 0
        While i < linenumber - 1
            strline = strm.ReadLine
            strmwriter.WriteLine(strline)
            i = i + 1

        End While

        Dim lineposition As Int32
        Dim str_vuoto As String = " "
        Dim carattere_strano As String

        strline = strm.ReadLine

        For k As Integer = 0 To ascii.Length
            ascii(k) = Chr(k)
            carattere_strano = ascii(k)
            lineposition = InStr(strline, carattere_strano)
            If lineposition > 0 Then
                strreplace = str_vuoto
                strline = Mid(strline, 1, lineposition - 1) + strreplace + Mid(strline, lineposition + 1)
                strmwriter.WriteLine(strline)
            End If
            
            Exit For
        Next
        'strline = Mid(strline, 1, lineposition - 1) + strreplace + Mid(strline, lineposition + 1)'
        'strmwriter.WriteLine(strline)'

        'strline = Mid(strline, 1, lineposition - 1) + strreplace + Mid(strline, lineposition - 1)'


        'Exit For'


        strline = strm.ReadToEnd
        strmwriter.WriteLine(strline)

        strm.Close()
        strm = Nothing

        strmwriter.Flush()
        strmwriter.Close()
        strmwriter = Nothing



    End Sub


    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Close()
    End Sub
End Class
ho cercato di passare in un array tutti i caratteri ascii ma mi sa che sbaglio qualcosa.
Confido in voi per i suggerimenti da applicare a questo eseguibile e soprattutto scusate se c 'è qualcosa di sbagliato ma x me è un linguaggio nuovo

Re: [VB.net aiuto e dubbi]

Inviato: lunedì 15 giugno 2015, 13:38
da SuperStep
scusa ma non avevi provato a fare la stessa cosa in questo altro post con java http://forum.ubuntu-it.org/viewtopic.ph ... 5#p4766175

quali sono questi caratteri ascii?

Re: [VB.net aiuto e dubbi]

Inviato: lunedì 15 giugno 2015, 14:10
da Chry1991
a me capitano la e la →.... sono una t rovesciata e la freccia... ma vorrei intercettarli tutti... In java ho scritto il programma e non ho problemi ma i miei colleghi usano VB e non sanno usare Java :) per quello l'ho riscritto


io vorrei inserire in un array tutti i caratteri ascii in modo tale che io controllo che nel file xml non ce ne sia neanche uno di quel carattere... perchè siccome sono file che a noi vengono forniti non ne sappiamo il contenuto

Re: [VB.net aiuto e dubbi]

Inviato: lunedì 15 giugno 2015, 23:14
da SuperStep
secondo me come ti aveva suggerito zoff e' la strada migliore. E' meglio utilizzare un software gia' scritto che si occupa di queste cose, usa sed.

Re: [VB.net aiuto e dubbi]

Inviato: martedì 16 giugno 2015, 8:57
da Chry1991
si ma noi dobbiamo integrarlo nel nostro software che vendiamo e usare un tool non è fattibile

Re: [VB.net aiuto e dubbi]

Inviato: martedì 16 giugno 2015, 9:28
da Chry1991
comunque il mio codice di sbagliato aveva l'exit for messo in un posto sbagliato.... pero questa istruzione

Codice: Seleziona tutto

strline = Mid(strline, 1, lineposition - 1) + strreplace + Mid(strline, lineposition + 1)
eliminerebbe il primo carattere ascii che trova sulla riga e la riscrive ma se i caratteri ascii fossero due eliminerebbe solo il primo...
come posso sistemarla??