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:
CitarINSERT 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.
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... ;)
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:CitarINSERT 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... :(
Cita de: Ikillnukes en 2 Agosto 2013, 14:39 PMLo 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...
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 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...
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM
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
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM
¿Porque intentas buscar las comillas al principio o al final de cada token?
Para ver si la string está formulada correctamente...
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM¿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
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM¿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...
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM¿Que narices intentas hacer en realidad?
Ya te lo he explicado... xD
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM¿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
Cita de: EleKtro H@cker en 2 Agosto 2013, 20:37 PM...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... :(
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...
Cita de: EleKtro H@cker en 2 Agosto 2013, 22:18 PM
¿Hay que escapar cualquier comilla que esté dentro de la primera y última comilla...
Hay le has dao. :D
Cita de: EleKtro H@cker en 2 Agosto 2013, 22:18 PM...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)
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...
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... :-\
Cita de: Ikillnukes en 2 Agosto 2013, 23:42 PMbuscar la String original y sustituirla por la nueva dentro de un archivo...
-> .Replace (http://msdn.microsoft.com/en-us/library/system.string.replace.aspx)
Cita de: Ikillnukes en 2 Agosto 2013, 23:42 PMMsgBox(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)
Cita de: Ikillnukes en 2 Agosto 2013, 23:42 PMEn 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
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
Usa un Boolean y cambia al estado True/False cuando reemplazes, así sabrás si has reemplazado o no lo has hecho...
Saludos
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:
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...
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 AMCita de: EleKtro H@cker en 3 Agosto 2013, 00:20 AMCita de: EleKtro H@cker en 3 Agosto 2013, 00:20 AMCita de: EleKtro H@cker en 3 Agosto 2013, 00:20 AMCita de: EleKtro H@cker en 3 Agosto 2013, 00:20 AMCita de: EleKtro H@cker en 3 Agosto 2013, 00:20 AMUsa un Boolean !!...
Saludos
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...?
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
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 ;)
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!
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:
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