Problema con IsMatch en Regex

Iniciado por z3nth10n, 1 Agosto 2013, 23:04 PM

0 Miembros y 8 Visitantes están viendo este tema.

z3nth10n

#10
A ver te explico lo de las MsgBox que es lo que más me incumbe...

Se supone que por cada reemplazo que haga se tiene que registrar luego en un log, como en el Anti-malware bytes... Pero claro... Si le meto aquí: Case Result.StartsWith("""") AndAlso Result.EndsWith("""") algún Value o un File append, StreamWriter que luego vaya al Log, por cada cual que empiece y termine por comillas, lo va a registrar en el Log como que se ha reemplazado, pero claro, y si no hubiese hecho el reemplazo?

Meto un If Result.Was Replaced Then nananana.TofileAppend etc etc

Como saco yo si lo ha hecho o no... Por eso lo de las MsgBox... A ver si ahora lo pillas... :P

Interesados hablad por Discord.

Eleкtro

#11
Usa un Boolean y cambia al estado True/False cuando reemplazes, así sabrás si has reemplazado o no lo has hecho...

Saludos








z3nth10n

#12
Ahá... ;D

Código (vbnet) [Seleccionar]
Select Case True

                   Case Result.StartsWith("'") AndAlso Result.EndsWith("'")
                       Dim posResultado = Result
                       Dim preResultado = String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'"))
                       MsgBox(preResultado)
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Result.StartsWith("'") AndAlso Not Result.EndsWith("'")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("'{0}", Result.Substring(1, Result.Length - 1).Replace("'", "\'"))
                       MsgBox(preResultado & "'")
                       MsgBox("Msg: #2 (String arreglada; Error #1: [Faltaba la última comilla])", MsgBoxStyle.Information, "Información")
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Not Result.StartsWith("'") AndAlso Result.EndsWith("'")
                       Dim posResultado = Result
                       Dim preResultado As String = Result.Replace("'", "\'")
                       MsgBox("'" & preResultado)
                       MsgBox("Msg: #2 (String arreglada; Error: #2: [Faltaba la primera comilla])", MsgBoxStyle.Information, "Información")
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Not Result.StartsWith("'") AndAlso Not Result.EndsWith("'") AndAlso Result.Contains("'")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("{0}", Result.Replace("'", "\'"))
                       MsgBox("'" & preResultado & "'")
                       MsgBox("Msg: #2 (String arreglada; Error: #3: [Faltaban las comillas de extremos])", MsgBoxStyle.Information, "Información")
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                       '-----------------------

                   Case Result.StartsWith("""") AndAlso Result.EndsWith("""")
                       Dim posResultado = Result
                       Dim preResultado = String.Format("""{0}""", Result.Substring(1, Result.Length - 2).Replace("""", "\"""))
                       MsgBox(preResultado)
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Result.StartsWith("""") AndAlso Not Result.EndsWith("""")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("""{0}", Result.Substring(1, Result.Length - 1).Replace("""", "\"""))
                       MsgBox(preResultado & """")
                       MsgBox("Msg: #2 (String arreglada; Error #1: [Faltaba la última comilla])", MsgBoxStyle.Information, "Información")
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Not Result.StartsWith("""") AndAlso Result.EndsWith("""")
                       Dim posResultado = Result
                       Dim preResultado As String = Result.Replace("""", "\""")
                       MsgBox("""" & preResultado)
                       MsgBox("Msg: #2 (String arreglada; Error: #2: [Faltaba la primera comilla])", MsgBoxStyle.Information, "Información")
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Not Result.StartsWith("""") AndAlso Not Result.EndsWith("""") AndAlso Result.Contains("""")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("{0}", Result.Replace("""", "\"""))
                       MsgBox("""" & preResultado & """")
                       MsgBox("Msg: #2 (String arreglada; Error: #3: [Faltaban las comillas de extremos])", MsgBoxStyle.Information, "Información")
                       If Not preResultado = posResultado Then
                           MsgBox("Msg: #1 (String Cambiada)", MsgBoxStyle.Information, "Información")
                       End If

                   Case Else
                       MsgBox(Result)

               End Select


Yo he usado un If, si quieres mejorar mi Snippet... Pues mejor... :P

Para dudas que estén dentro de este code, pero no tenga que ver con el Regex ni el IsMatch, creo un nuevo topic o con este ya vale? :huh:

Interesados hablad por Discord.

Eleкtro

#13
Cita de: Ikillnukes en  3 Agosto 2013, 13:17 PMYo he usado un If, si quieres mejorar mi Snippet... Pues mejor... :P

Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AMUsa un Boolean y cambia al estado True/False cuando reemplazes, así sabrás si has reemplazado o no lo has hecho...

Repites en 24 lineas exáctamente el mismo código...

Código (vbnet) [Seleccionar]
Dim IsValueReplaced as boolean = false

private sub ()...

Select Case True

    Case loquesea
        IsValueReplaced = true
        Dim Resultado = String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'"))
        MsgBox(Resultado)

    Case loquesea 2
        IsValueReplaced = true
        Dim Resultado As String = String.Format("'{0}", Result.Substring(1, Result.Length - 1).Replace("'", "\'"))
        MsgBox(Resultado & "'")

    Case loquesea 3
        IsValueReplaced = true
        Dim Resultado As String = Result.Replace("'", "\'")
        MsgBox("'" & Resultado)

   ' More Cases...

    Case Else
        MsgBox(Result)

End Select

   If IsValueReplaced Then MessageBox.Show("Msg: #1 (String Cambiada)", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)

   IsValueReplaced = false

end sub


Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AM
Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AM
Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AM
Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AM
Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AM
Cita de: EleKtro H@cker en  3 Agosto 2013, 00:20 AMUsa un Boolean !!...

Saludos








z3nth10n

Una duda, así de cerca... Y sin probar nada...

Si meto ese code en primer Case que es solo comprobar si tiene comillas al principio y al final... No va a cambiar siempre que se cumpla esa condición y no cuando se reemplace...?

Interesados hablad por Discord.

Eleкtro

No entiendo tu pregunta (para variar), pero si te lo pongo es por algo.

el código que está fuera del select case sucede independientemente de las condiciones que se hayan dado... así que si el valor se ha reemplazado pues mostrará el msgbox...
... y al final del bloque siempre se reinicia la variable a False, así que...no hay problemas...

practícalo un poco....

saludos








z3nth10n

#16
Código final:

Código (vbnet) [Seleccionar]
           Dim lines As String() = File.ReadAllLines(TextBox1.Text)

           Dim MaxCommas As Integer = CountCharacter(lines(0), ",")

           Dim TimesSplitted As Integer = 0

           For Each Result As String In Regex.Split(Line, ",|\n")

               Select Case True

                   Case Result.StartsWith("'") AndAlso Result.EndsWith("'")
                       Dim posResultado = Result
                       Dim preResultado = String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'"))
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write(preResultado & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Result.StartsWith("'") AndAlso Not Result.EndsWith("'")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("'{0}", Result.Substring(1, Result.Length - 1).Replace("'", "\'"))
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write(preResultado & "'" & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error #1: [Faltaba la última comilla])")
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Not Result.StartsWith("'") AndAlso Result.EndsWith("'")
                       Dim posResultado = Result
                       Dim preResultado As String = Result.Replace("'", "\'")
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write("'" & preResultado & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error: #2: [Faltaba la primera comilla])")
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Not Result.StartsWith("'") AndAlso Not Result.EndsWith("'") AndAlso Result.Contains("'")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("{0}", Result.Replace("'", "\'"))
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write("'" & preResultado & "'" & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error: #3: [Faltaban las comillas de extremos])")
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                       '-----------------------

                   Case Result.StartsWith("""") AndAlso Result.EndsWith("""")
                       Dim posResultado = Result
                       Dim preResultado = String.Format("""{0}""", Result.Substring(1, Result.Length - 2).Replace("""", "\"""))
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write(preResultado & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Result.StartsWith("""") AndAlso Not Result.EndsWith("""")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("""{0}", Result.Substring(1, Result.Length - 1).Replace("""", "\"""))
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write(preResultado & """" & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error #1: [Faltaba la última comilla])")
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Not Result.StartsWith("""") AndAlso Result.EndsWith("""")
                       Dim posResultado = Result
                       Dim preResultado As String = Result.Replace("""", "\""")
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write("""" & preResultado & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error: #2: [Faltaba la primera comilla])")
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Not Result.StartsWith("""") AndAlso Not Result.EndsWith("""") AndAlso Result.Contains("""")
                       Dim posResultado = Result
                       Dim preResultado As String = String.Format("{0}", Result.Replace("""", "\"""))
                       Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing

                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write("""" & preResultado & """" & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try
                       TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error: #3: [Faltaban las comillas de extremos])")
                       If Not preResultado = posResultado Then
                           TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
                       End If

                   Case Else
                                               Try

                           If File.Exists(PathArchivo3) Then
                               strStreamW = File.Open(PathArchivo3, FileMode.Append)
                           Else
                               strStreamW = File.Create(PathArchivo3)
                           End If

                           strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

                           Dim Splittado As String = Nothing


                           TimesSplitted += 1

                           If TimesSplitted = MaxCommas Then
                               Splittado = Environment.NewLine
                           ElseIf TimesSplitted < MaxCommas Then
                               Splittado = ","
                           End If

                           strStreamWriter.Write(Result & Splittado)

                           strStreamWriter.Close()

                           strStreamW = Nothing
                           strStreamWriter = Nothing

                       Catch ex As Exception
                           TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
                           strStreamWriter.Close()
                       End Try

               End Select
           Next Result


Voy a comer y pruebo tu code ;)

Interesados hablad por Discord.

Eleкtro

#17
No sé ni para que me molesto en explicarte técnicas de simplificación de código si sigues haciendo lo mismo con el streamwritter, y todas las variables e if's que hay alrededor...

¿No entiendes que todo ese código que repites 100 veces lo puedes usar para todos los Cases sin tener que repetirlo dentro de cada Case?

EDITO: de 78 lineas (sin simplificar) has pasado a 358 (igual)

Cada uno que programe como quiera... eres libre, pero yo por mi parte me rindo, no aporto más a este tema,
saludos!








z3nth10n

#18
CitarVoy a comer y pruebo tu code

Pues esperate bicho! :P

Ara vengo... :P




Tengo un problema en el Split cuando se trata de nuevas líneas si hay comillas, por alguna razón hace esto:

Citar...NULL, NULL, 'Final de una línea\'
'12334, NULL, 'Nueva línea jodida', NULL...

Que puedo hacer? :-\




Mejor explicado:

A ver, tengo este input: http://pastebin.com/7LFYfVnC
Este output final de dos archivos: http://pastebin.com/bdENKrqW (INSERTS.sql) y http://pastebin.com/4NXwBnZz (Variables.sql)
Y este output (supuestamente arreglado): http://pastebin.com/qc2FUXGT

Como puedes observar, todas las líneas finales que acaben por comilla están jodidas, a ver si puedes arreglar algo tu, o por lo menos decirme lo que está mal puesto... :-\

Estoy intentando arreglarlo con este code:

Código (vbnet) [Seleccionar]
Dim ContentFile As String = File.ReadAllText(PathArchivo3)
           Dim prefinalText As String = Regex.Replace(ContentFile, ".[']$\n[']", "'")
           Dim finalText As String = Regex.Replace(prefinalText, "\n", "")

           Try


               If File.Exists(PathArchivo4) Then
                   strStreamW = File.Open(PathArchivo4, FileMode.Append)
               Else
                   strStreamW = File.Create(PathArchivo4)
               End If

               strStreamWriter = New StreamWriter(strStreamW, System.Text.Encoding.Default)

               strStreamWriter.Write(finalText)

               strStreamWriter.Close()

               strStreamW = Nothing
               strStreamWriter = Nothing

           Catch ex As Exception
               TextBox3.AppendText("Error al Guardar la información en el archivo. " & ex.ToString)
               strStreamWriter.Close()
           End Try


Este es el code general:

http://pastebin.com/ZSpJ8gcz

Siiiii, todavía me faltan poner las Booleans luego al final de todo se las pongo... :P




Ya he arreglado todo, ahora solo me falta lo de las booleans y el log! :P




No he usado Booleans, he usado esto:

Código (vbnet) [Seleccionar]
               If remError = "1" Then

               ElseIf remWarning = "1" Then

               ElseIf remMsg = "1" Then
                   TextBox3.AppendText(Environment.NewLine & "Msg: #1 (String Cambiada)")
               ElseIf remError = "1" Then
                   TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error #1: [Faltaba la última comilla])")
               ElseIf remError = "2" Then
                   TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error: #2: [Faltaba la primera comilla])")
               ElseIf remError = "3" Then
                   TextBox3.AppendText(Environment.NewLine & "Msg: #2 (String arreglada; Error: #3: [Faltaban las comillas de extremos])")
               ElseIf remError = "4" Then
                   TextBox3.AppendText(Environment.NewLine & "Error al Guardar la información en el archivo. ")
               End If

               remError = Nothing
               remWarning = Nothing
               remMsg = Nothing


Es un sistema parecido... :P

Interesados hablad por Discord.