Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [VB.Net] rendere String.Replace Case InSensitive

    salve a tutti,

    ho notato che la funzione String.Replace è Case Sensitive...

    invece io vorrei poter avere la possibilità di sostituire anche la stringa che è scritta in Lower Case...

    questo perchè io devo leggere da un file in cui ci sono delle stringa del tipo:

    codice:
    %ProgramFiles%\StampeJava\
    %ProgramFiles%\StampeJava\ImmaginiStampa\
    io dovrei sostituire la stringa %ProgramFiles% con la path presa tramite l'oggetto Environment di vb.net...

    solo che non sapendo come l'utente (amministratore) mi inserirà la path (me la può inserire tutta maiuscola, tutta minuscola, un carattere si e uno no in minuscolo/maiuscolo) io pensavo di fare:

    codice:
            For i As Integer = 0 To arrPath.GetUpperBound(0)
                arrFile = arrPath(i).Split(";")
                For y As Int32 = 0 To arrFile.GetUpperBound(0)
                    arrFile(y) = arrFile(y).Replace("%programfiles%", Environment.GetEnvironmentVariable("ProgramFiles"))
                Next
           Next
    solo che il replace non trova la stringa %programfiles% in quanto nel file è scritta %ProgramFiles%...

    quindi chiedo a voi, non potendo modificare la stringa e volendo rimpiazzare, senza guardare a come è scritta, una parola in una stringa, come posso fare a fare un Replace Case Insensitive in VB.Net?

    spero di essermi spiegato...

    grazie
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  2. #2
    Rendi prima tutta la stringa in minuscolo:
    codice:
    arrFile(y) = arrFile(y).ToLower.Replace("%programfiles%", Environment.GetEnvironmentVariable("ProgramFiles"))

  3. #3
    è li il problema...

    non posso... in quanto se uno mi scrive: %ProgramFiles%\StampeJava\
    io devo creargli la cartella o in file così come viene scritta...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  4. #4
    Usa la RegEx replace.

    Vai su MSDN per maggiori info adesso devo scappare ciaooo.

  5. #5
    Originariamente inviato da andreaciao_22
    è li il problema...

    non posso... in quanto se uno mi scrive: %ProgramFiles%\StampeJava\
    io devo creargli la cartella o in file così come viene scritta...
    Ma tu non hai accennato al fatto di dover creare cartelle, o sbaglio?

    Originariamente inviato da flash.tato
    Usa la RegEx replace.
    Vai su MSDN per maggiori info adesso devo scappare ciaooo.
    In effetti Regex.Replace senza l'opzione Case Sensitive è la soluzione migliore.

  6. #6
    vi scrivo tutto il programma, tanto è breve, così mi dite anche se ci possono essere modifiche da fare:

    codice:
    Imports System.IO
    Module modAvvio
        Dim strPrg As String = "JavaUpdate"
        Sub Main()
            Dim arrFile As String(), arrPath As String()
            arrPath = PrendiFileTesto()
            If arrPath Is Nothing Then
                End
                Exit Sub
            End If
            For i As Integer = 0 To arrPath.GetUpperBound(0)
                arrFile = arrPath(i).Split(";")
                If arrFile(0).Trim.Length > 0 Then
                    For y As Int32 = 0 To arrFile.GetUpperBound(0)
                        arrFile(y) = arrFile(y).Replace("%ProgramFiles%", Environment.GetEnvironmentVariable("ProgramFiles"))
                        arrFile(y) = arrFile(y).Replace("%SystemRoot%", Environment.GetEnvironmentVariable("SystemRoot"))
                    Next
                    Select Case arrFile.GetUpperBound(0)
                        Case 0
                            If Directory.Exists(arrFile(0)) = False Then
                                Directory.CreateDirectory(arrFile(0))
                            End If
                        Case 1
                            If arrFile(0).Substring(arrFile(0).Length - 1) = Path.DirectorySeparatorChar And arrFile(1).Substring(arrFile(1).Length - 1) = Path.DirectorySeparatorChar Then
                                Call CreaCopiaDirectory(arrFile(0), arrFile(1))
                            Else
                                Call CreaCopiaFile(arrFile(0), arrFile(1))
                            End If
                        Case Else
                            Call Errore("Impossibile controllare il file: " & arrFile(0), strPrg)
                    End Select
                End If
            Next
            Application.Exit()
        End Sub
        Function PrendiFileTesto() As String()
            Dim arrTesto As String(), SR As StreamReader, strTesto As String, strFile As String
            arrTesto = Nothing
            Try
                strFile = "\\Server_linux\Utile\Spool\StampeJava\impofile.txt"
                SR = New StreamReader(strFile)
            Catch ex1 As Security.SecurityException
                Call Errore(ex1.Message, strPrg)
                Return arrTesto
            Catch ex As FileNotFoundException
                Dim strMsg As String
                strMsg = "File delle impostazioni di " & strPrg & " non trovato o connessione alla rete inesistente"
                Call Errore(strMsg, strPrg)
                Return arrTesto
            End Try
            strTesto = SR.ReadToEnd
            SR.Close()
            SR = Nothing
            arrTesto = strTesto.Split(Environment.NewLine)
            For i As Integer = 0 To arrTesto.GetUpperBound(0)
                arrTesto(i) = arrTesto(i).Replace(vbLf, "")
            Next
            Return arrTesto
        End Function
    
        Sub CreaCopiaDirectory(ByVal strDirO As String, ByVal strDirC As String)
            Dim DirO As DirectoryInfo, DirC As DirectoryInfo, swFind As Boolean
            DirO = New DirectoryInfo(strDirO)
            DirC = New DirectoryInfo(strdirC)
            If DirO.Exists = False Then
                Call Errore("La cartella " & strDirO & "non esiste... chiamare Programmatori!!", strPrg)
            Else
                If DirO.Equals(DirC) Then
                    Call Errore(DirO.FullName & ": la path di origile e la path di destinazione sono identiche", strPrg)
                Else
                    Call CopiaDirectory(strDirO, strDirC)
                End If
            End If
        End Sub
    
        Public Sub CopiaDirectory(ByVal Origine As String, ByVal Destinazione As String)
            Dim CorrDirectory As DirectoryInfo = New DirectoryInfo(Origine)
            Dim OFile As FileInfo, SubDir As DirectoryInfo, strPath As String
            If Directory.Exists(Destinazione) = False Then
                Directory.CreateDirectory(Destinazione)
            End If
            For Each SubDir In CorrDirectory.GetDirectories()
                strPath = Path.Combine(Destinazione, SubDir.Name)
                CopiaDirectory(SubDir.FullName, strPath)
            Next
            For Each OFile In CorrDirectory.GetFiles()
                strPath = Path.Combine(Destinazione, OFile.Name)
                Call CreaCopiaFile(OFile.FullName, strPath)
            Next
        End Sub
    
        Sub CreaCopiaFile(ByVal strFileO As String, ByVal strFileC As String)
            Dim strMsg As String, FileC As FileInfo, FileO As FileInfo
            FileO = New FileInfo(strFileO)
            FileC = New FileInfo(strFileC)
            If FileO.Exists = False Then
                Call Errore("Il file " & strFileO & " non esiste... chiamare programmatori!!", strPrg)
            Else
                If strFileO.Equals(strFileC, StringComparison.CurrentCultureIgnoreCase) Then
                    strMsg = strFileO & ": Il file da controllare e il file originale hanno la stessa path"
                    Call Errore(strMsg, strPrg)
                Else
                    If FileC.Exists = False Then
                        FileO.CopyTo(strFileC)
                    Else
                        If FileO.LastWriteTime > FileC.LastWriteTime Then
                            FileC.Delete()
                            FileO.CopyTo(strFileC)
                        End If
                    End If
                End If
            End If
            FileC = Nothing
            FileO = Nothing
        End Sub
    End Module
    
    Module modAvvisi
        Sub Errore(ByVal strMsg As String, ByVal strTitle As String)
            MessageBox.Show(strMsg, strTitle, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Sub
    End Module
    per ora c'è la replace in quanto io non sò usare le RegEx....
    mi studio la cosa e poi lo innesto nel programma....
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.