Formatear solo la primera fila de un archivo de texto con Regex y otros

Buenos días

Estoy intentando hacer unos reemplazos y no consigo obtener el resultado esperado :

  1. Tengo que cambiar las comas de la primera línea del texto por coma y comillas:
    Si tengo este texto: Nodo,Nodo_Normalizado,Componente,Medida,Descripción del Nodo,
    tengo que cambiar la , por “,” y al principio de linea poner “.El resultado seria
    “Nodo”,“Nodo_Normalizado”,“Componente”,“Medida”,“Descripción del Nodo”
    Esta expresion que tengo no me hace nada:
    System.Text.RegularExpressions.Regex.Replace(Csvtext, “^(,)”,”;")

  2. Necesito cambiar todas las comas que haya dentro de este patrón ;,+; reemplazarlas por ;
    es decir , todas las comas que hayan entre los ; cambiarlas a puntos y comas.

  3. como puedo eliminan los saltos de lineal? y como `puedo sustituir el retorno de carro por saltos de lineal?

Muchas gracias por anticipado.

grafik
strText = String.Format("{0}{1}{0}","""", strText.replace(",",""","""))

Hola Peter,

Pero solo quiero reemplazar la Primera linea de un archivo de texto( que corresponde al encabezado) si pongo eso me va a cambiar todo el texto, no?
Es verdad que lo puedo meter dentro de una variable si fuera siempre los mismos valores, pero en el caso que cambiaran debería de modificar esa variable.
Existe la opción de manera general identificar la primera fila de un texto?

Muchas gracias

It is depending on your strategy on processing / handling the CSV file

Read CSV File Activity
grafik

then we change the column name
grafik

Working on Text File Level:

 arrLines = File.ReadAllLines(Path.Combine(Environment.CurrentDirectory,"_Boxes\CSVParseBox\Export_08042022.csv"))
 string[3] { "Nodo,Nodo_Normalizado,Componente,Medida,Descripción del Nodo", "A1,B1,C1,D1,E1", "A2,B2,C2,D2,E2" }
 String.Format("{0}{1}{0}","""", arrLines.First().replace(",",""","""))
 "\"Nodo\",\"Nodo_Normalizado\",\"Componente\",\"Medida\",\"Descripción del Nodo\""
 arrLines(0) = String.Format("{0}{1}{0}","""", arrLines.First().replace(",",""","""))
 "\"Nodo\",\"Nodo_Normalizado\",\"Componente\",\"Medida\",\"Descripción del Nodo\""
 arrLines
 string[3] { "\"Nodo\",\"Nodo_Normalizado\",\"Componente\",\"Medida\",\"Descripción del Nodo\"", "A1,B1,C1,D1,E1", "A2,B2,C2,D2,E2" }
 String.Join(Environment.NewLine, arrLines)
 @"""Nodo"",""Nodo_Normalizado"",""Componente"",""Medida"",""Descripción del Nodo""
 A1,B1,C1,D1,E1
 A2,B2,C2,D2,E2"

read the file
update header line
Join line to string
Pass it to generate datatable actvity

Buenos días Peter

Muchas gracias, conseguí poner las comillas en la primera fila del archivo de texto, ( lo hice como archivo de texto).

Respecto a las otras dudas , se te ocurre como hacer el punto 2:
sustituir las , que aparezcan por ; entre ;; , es decir ;, n veces;sustituir ; ;;; n veces ;

unclear on what is your input text, have a look here:

[CheatSheet] - System.Text.RegularExpressions | RegEx - News / Tutorials - UiPath Community Forum

por ejemplo:
;,; sustituir por ;;;;;
pero no se a priori cuantas comas va haber entre los puntos y comas

Con esta expresion (;,+;) localizo las comas que hay , pero necesito sustituirlas por punto y comas.
image

sorry, el ejemplo no es correcto:
;,; sustituir por ;;;;;

no se que pasa pero elimina las comas… jejeje

; , ; sustituir por ; ;;; ;

image

Maybe this will help:
grafik

 strText
 "ABC;,; ABC;,,; ABC;,,,, ABC;,,,; AbX,,,,"
 strPattern = "(?<=\;)(\,)+"
 "(?<=\;)(\,)+"
 Regex.Replace(strText,strPattern, Function (m) ";".PadLeft(m.Value.length,";"c))
 "ABC;;; ABC;;;; ABC;;;;; ABC;;;;; AbX,,,,"

Hola Peter,

los casos serian estos
strText= "ABC;,; ABC;,; ABC;,;
inicio y fin del patrón con ; (punto y coma)

seria Correcto?
(?<=;)(,)+(:wink:

image

not sure, if I got your feedback in the right way. If the pattern should also anchor the end (provided pattern was already picking up all the commas) we can do:
grafik

(?<=\;)(\,*?)(?=\;)

Buenas tardes,

Me funciono todo lo que me dijiste. Muchas gracias. :slight_smile:

un saludo

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.