Título: Problema con IsMatch en Regex
Publicado por: z3nth10n en 1 Agosto 2013, 23:04 pm
Hola buenas, pues a ver... Tengo un Regex que lo que hace es buscar esto: Dim Line As String = File. ReadAllText(PathArchivo ) For Each Result As String In Line.Split(", ") If Not Regex.IsMatch(Result, "^'|'$") Then MsgBox("Error", MsgBoxStyle.Critical, "Error") else msgbox(result) End If Next
El problema es cuando lee Line, puse a caso hecho una comilla de más, entre Split y Split, es decir: INSERT INTO Videos VALUES(13455,1,9,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,''dfdfdfd',NULL,NULL,429060,NULL); INSERT INTO Videos VALUES(13456,1,9,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,429060,NULL); INSERT INTO Videos VALUES(13457,1,9,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,429060,NULL); El caso es que salta la advertencia de Error todo el rato, como lo hago, que estoy haciendo mal? Un saludo.
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 2 Agosto 2013, 01:52 am
A veces soy muy pavico y no me paro a pensar... Y claro como llevaba prisa pues pasa lo que pasa: For Each Result As String In Line.Split(", ") If Result.StartsWith("'") Or Result.StartsWith("""") Then If Not Regex.IsMatch(Result, "^'|'$") Then MsgBox("Error", MsgBoxStyle.Critical, "Error") Else MsgBox(Result) End If Else MsgBox(Result) End If Next
Esta es la solución... ;)
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 2 Agosto 2013, 14:39 pm
Perdón por hacer Triple post... Si queréis unirlo a mi me da igual.. ;) A ver... No se si es problema mío o que es lo que es... For Each Result As String In Line.Split(",") If Result.Contains("'") Or Result.Contains("""") Then If Not Regex.IsMatch(Result, "^'|'$") Then MsgBox("Error", MsgBoxStyle.Critical, "Error") Else If Not CountCharacter(Result, "'") Or CountCharacter(Result, """") Mod 2 = 0 Then MsgBox(Result) Else MsgBox("Error", MsgBoxStyle.Critical, "Error") End If End If Else MsgBox(Result) End If Next
Archivo txt:INSERT INTO Videos VALUES(13455,1,9,NULL,'Correcto','dhdhfh,NULL,NULL,NULL,NULL,NULL,NULL,NULL,''dfdfdfd',NULL,NULL,429060,NULL); Hasta aquí todo correcto, el problema es cuando empieza a Splitear, he comprobado de que no me pone nada tal que " NULL", o cualquier cosa con: MsgBox("""" & Result & """")
Ostias, ahora me estoy dando cuenta de que no hay espacios entre las comas... xD PD: Así que no es problema del Spliteo... ;D
Pero por igual me sigue fallando la clasificatoria... A ver... Todos me los muestra y ninguno me sale como Error, y hay 2 errores intencionados... 'dhdhfh y el otro ''dfdfdfd'Deberían saltar 2 errores pero en vez de eso, saltan las MsgBox como si nada pasase.... Que estoy haciendo mal? Que alguien me lo explique... PD: CountCharacter(Result, "'") cuenta cuantas ' y " hay... Hay no hay problema hay he probado sin el MsgBox Result y me muestra que en uno hay 1 y en el otro hay 3 Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer Dim cnt As Integer = 0 For Each c As Char In value If c = ch Then cnt += 1 Next Return cnt End Function
He probado el Operador Mod con: MsgBox(3 Mod 2 = 0)
y nada, si que lo hace bien... Según he leido por ahí, esto lo usan pa saber si es Par o Impar... En caso de que fuese Impar saltaría el error... Pero no salta... Creo que lo clasifica en: For Each Result As String In Line.Split(",") If Result.Contains("'") Or Result.Contains("""") Then If Not Regex.IsMatch(Result, "^'|'$") Then '... Todo este contenido se lo salta D: Else MsgBox(Result) End If Else MsgBox(Result) End If
Que puedo hacer? D:
He probado a poner: MsgBox("Esta cadena contiene "" o ' en su interior...")
Y parece que si salta la advertertencia... Es decir que el error esta si o si, al final cuando lo va a detectar... :( For Each Result As String In Line.Split(",") If Regex.IsMatch(Result, "'") Or Regex.IsMatch(Result, """") Then MsgBox("Esta cadena contiene "" o ' en su interior...") If Not Regex.IsMatch(Result, "^'|'$") Then MsgBox("Esta cadena contiene "" o ' en su interior...3") MsgBox("Error", MsgBoxStyle.Critical, "Error") Else MsgBox("Esta cadena contiene "" o ' en su interior...2") If Not CountCharacter(Result, "'") Or CountCharacter(Result, """") Mod 2 = 0 Then MsgBox("Esta cadena contiene "" o ' en su interior...5") MsgBox(Result) Else MsgBox("Esta cadena contiene "" o ' en su interior...6") MsgBox("Error", MsgBoxStyle.Critical, "Error") End If End If Else MsgBox(Result) End If
Siempre es lo mismo 1, 2, 5... Es decir que el error por descarte para 'dhdhfh está en la línea 4 y el otro ''dfdfdfd' está en la línea 9... :( Lo estoy haciendo de alguna forma en la que los Ifs se los pasan por el Forro... :(
Si le cambio el orden, a esto: If Not CountCharacter(Result, "'") Or CountCharacter(Result, """") Mod 2 = 0Then MsgBox("Esta cadena contiene "" o ' en su interior...5") MsgBox(Result) Else MsgBox("Esta cadena contiene "" o ' en su interior...6") MsgBox("Error", MsgBoxStyle.Critical, "Error") End If
Por esto: If Not CountCharacter(Result, "'") Or CountCharacter(Result, """") Mod 2 = 0 Then MsgBox("Esta cadena contiene "" o ' en su interior...6") MsgBox("Error", MsgBoxStyle.Critical, "Error") Else MsgBox("Esta cadena contiene "" o ' en su interior...5") MsgBox(Result) End If
Tira todo el rato para 1,2,6 :( p**a lógica... :(
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 2 Agosto 2013, 20:37 pm
Lo estoy haciendo de alguna forma en la que los Ifs se los pasan por el Forro... :( Pues intenta no escribir if's anidados... -> Select Case (http://msdn.microsoft.com/es-es/library/cy37t14y.aspx) Yo aquí sólo veo dos posts largos y ninguna pregunta... ¿Y si explicas de una manera decente específica lo que intentas hacer con todo esto?...quizás así, y sólo quizás, te podamos ayudar... ¿Porque intentas buscar las comillas al principio o al final de cada token?, ¿Porque intentas contar las comillas que tiene cada token?, ¿Cual es el fín de tu código?, ¿Que narices intentas hacer en realidad?, ¿Porque pones "trampas" a posta?, etc... ...y lo más importante, ¿Que maldito resultado es el que esperas obtener?, porque yo no entiendo que resultado quieres obtener, no sé si quieres obtener el string dentro de las comillas o que coj*nes. Saludos...
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 2 Agosto 2013, 21:34 pm
Pues intenta no escribir if's anidados... -> Select Case (http://msdn.microsoft.com/es-es/library/cy37t14y.aspx)
Te las he visto usar varias veces... Voy a ver lo que puedo sacar... Yo aquí sólo veo dos posts largos y ninguna pregunta... ¿Y si explicas de una manera decente específica lo que intentas hacer con todo esto?...quizás así, y sólo quizás, te podamos ayudar...
Bueno a ver te lo explico... Mi app lo que hace es limpiar las strings, como puedes ver hay una string mal hecha que si la abres con el Sublime text en SQL: http://pastebin.com/Siy0gK67 Puedes ver lo que pasa... :P ¿Porque intentas buscar las comillas al principio o al final de cada token? Para ver si la string está formulada correctamente... ¿Porque intentas contar las comillas que tiene cada token? Para así poder saber si por igual está bien hecha, es decir, puede que a veces haya una string así: un token, 'otro token con algo de texto, error' y más texto', otro token Si en ese token: 'otro token con algo de texto, error' y más texto' hay 3 (numero impar) o más de 3 comillas ya significa que algo no está bien. :P ¿Cual es el fín de tu código? Ya lo he explicado, y bueno, pues la finalidad es limpiar Strings de un SQL que se haya exportado mal desde otro programa... ¿Que narices intentas hacer en realidad? Ya te lo he explicado... xD ¿Porque pones "trampas" a posta? Trampas, quien ha dicho trampas, si me lo explicases a que te refieres, no veo trampas... O si? No se... xD ...y lo más importante, ¿Que maldito resultado es el que esperas obtener?, porque yo no entiendo que resultado quieres obtener, no sé si quieres obtener el string dentro de las comillas o que coj*nes... Pues por ejemplo uno de los resultados es Escapar la String, por ejemplo en ese tan bonito token 'otro token con algo de texto, error' y más texto', pues: 'otro token con algo de texto, error\' y más texto'Ale ya te he explicao lo que quiero hacer... Seguro que ahora los de la CIA me cogen la patente... :( xD
Select Case Result Case Regex.IsMatch(Result, "^'|'$") = False Or Regex.IsMatch(Result, "^""|""$") = False MsgBox("Error: #1") Case CountCharacter(Result, "'") Mod 2 = True Or CountCharacter(Result, """") Mod 2 = True MsgBox("Error: #2") Case Else MsgBox(Result) End Select
Joder, pos si que es verdad que se ahorra texto, pero por igual no me muestra que sean errores... :(
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 2 Agosto 2013, 22:18 pm
vale quieres formatear el string escapando comillas sueltas...
Dime cual de estos resultados es incorrecto:
1: 'bla 'bla' bla' -> 'bla \'bla\' bla'
2: 'bla bla' bla' -> 'bla bla\' bla'
3: 'bla 'bla' 'bla' -> 'bla 'bla' \'bla'
...es decir, ¿Hay que escapar cualquier comilla que esté dentro de la primera y última comilla, o sólamente hay que escapar las comillas impares?
Imagino que habrá que escaparlas todas como en el primer y segundo ejemplo, como en otros lenguajes, pero por si acaso...
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 2 Agosto 2013, 22:28 pm
¿Hay que escapar cualquier comilla que esté dentro de la primera y última comilla... Hay le has dao. :D ...hay que escapar las comillas impares?
Nope. Claro, lo que tu dices, hay que escapar las comillas que estén dentro de esas subcomillas... Es decir, lo primero que tu has preguntado.. :P Es decir: 1: 'bla 'bla' bla' -> 'bla \'bla\' bla' (http://www.sitewizard.co.uk/images/tick_icon.png) 2: 'bla bla' bla' -> 'bla bla\' bla' (http://www.sitewizard.co.uk/images/tick_icon.png) 3: 'bla 'bla' 'bla' -> 'bla 'bla' \'bla' (http://www.sitewizard.co.uk/images/cross_icon.png) Correción para el 3º: 3: 'bla 'bla' 'bla' -> 'bla \'bla\' \'bla' (http://www.sitewizard.co.uk/images/tick_icon.png)
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 2 Agosto 2013, 23:31 pm
En lugar de usar una expresión regular para comprobar si tiene comillas... o calcular cuantas comillas hay en el token... diréctamente hago los reemplazos: Public Class Form1 Dim strarray() As String = _ "NULL,'Correcto','mal,NULL,''mal'',NULL,'mal'',NULL,''mal',mal',NULL".Split(",") Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown For Each value In strarray Select Case True Case value.StartsWith("'") AndAlso value.EndsWith("'") MsgBox(String.Format("'{0}'", value.Substring(1, value.Length - 2).Replace("'", "\'"))) Case value.StartsWith("'") AndAlso Not value.EndsWith("'") MsgBox(value.Replace("'", "\'")) Case value.EndsWith("'") AndAlso Not value.StartsWith("'") MsgBox(value.Replace("'", "\'")) Case Else MsgBox(value) End Select Next value End Sub End Class
Saludos...
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 2 Agosto 2013, 23:42 pm
Ala con la tontería me has hecho la app... :P For Each Result As String In Regex.Split(Line, ",|\n") Select Case True Case Result.StartsWith("'") AndAlso Result.EndsWith("'") MsgBox(String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'"))) Case Result.StartsWith("'") AndAlso Not Result.EndsWith("'") MsgBox(Result & "'") Case Result.EndsWith("'") AndAlso Not Result.StartsWith("'") MsgBox("'" & Result) Case Else MsgBox(Result) End Select Next Result
Ahora ya solo me falta enumerar los errores y varias cosillas más pa meterlas en un Log... :P (Entre las cosillas, hay una que puede que a lo mejor no sepa hacer o puede que si, y es buscar la String original y sustituirla por la nueva dentro de un archivo... Veré lo que hago... :P Por cierto, se me olvidaba... ¡Muchas gracias! :D
Tengo una mini-duda... MsgBox(String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'")))
En caso de que se tuviese que reemplazar algo, como hago para mostrar una MsgBox... ??
Otra duda que me ha asaltado... En caso de que fuese unas "" lo que hubiese que reemplazar, tengo que hacer otro Select Case o dentro del mismo?... Bueno en realidad, no se ni porque no lo hago >:D Estoy modo l33t no te puedo fallar. :P Ya lo he arreglado con: Select Case True Case Result.StartsWith("'") AndAlso Result.EndsWith("'") MsgBox(String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'"))) Case Result.StartsWith("'") AndAlso Not Result.EndsWith("'") MsgBox(Result & "'") Case Result.EndsWith("'") AndAlso Not Result.StartsWith("'") MsgBox("'" & Result) '----------------------- Case Result.StartsWith("""") AndAlso Result.EndsWith("""") MsgBox(String.Format("""{0}""", Result.Substring(1, Result.Length - 2).Replace("""", "\"""))) Case Result.StartsWith("""") AndAlso Not Result.EndsWith("""") MsgBox(Result & """") Case Result.EndsWith("""") AndAlso Not Result.StartsWith("""") MsgBox("""" & Result) Case Else MsgBox(Result) End Select
Pero la duda de las MsgBox me sigue asaltando... :-\
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 2 Agosto 2013, 23:54 pm
buscar la String original y sustituirla por la nueva dentro de un archivo... -> .Replace (http://msdn.microsoft.com/en-us/library/system.string.replace.aspx) MsgBox(String.Format("'{0}'", Result.Substring(1, Result.Length - 2).Replace("'", "\'")))
En caso de que se tuviese que reemplazar algo, como hago para mostrar una MsgBox... ?? No entiendo la duda. -> String.Format (http://msdn.microsoft.com/en-us/library/system.string.format.aspx) En caso de que fuese unas "" lo que hubiese que reemplazar, tengo que hacer otro Select Case o dentro del mismo?... Puedes añadir las condiciones (Cases) que quieras... Saludos
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 3 Agosto 2013, 00:00 am
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
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 3 Agosto 2013, 00:20 am
Usa un Boolean y cambia al estado True/False cuando reemplazes, así sabrás si has reemplazado o no lo has hecho...
Saludos
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 3 Agosto 2013, 13:17 pm
Ahá... ;D 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:
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 3 Agosto 2013, 14:12 pm
Yo he usado un If, si quieres mejorar mi Snippet... Pues mejor... :P Usa 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... 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
Saludos
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 3 Agosto 2013, 14:25 pm
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...?
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 3 Agosto 2013, 14:34 pm
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
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 3 Agosto 2013, 14:46 pm
Código final: 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 ;)
Título: Re: Problema con IsMatch en Regex
Publicado por: Eleкtro en 3 Agosto 2013, 14:56 pm
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!
Título: Re: Problema con IsMatch en Regex
Publicado por: z3nth10n en 3 Agosto 2013, 15:00 pm
Voy 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: ...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: 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: 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
|