¿Cómo copio datos seleccionados específicos entre celdas en un archivo CSV en Excel o Notepad ++?

1

Tengo que descargar diariamente bases de datos de archivos multimedia y modificar metadatos de un archivo csv para que el prefijo numérico único en la columna B se agregue como un sufijo a las celdas en la columna C.

¿Hay alguna manera de hacer esto de una vez para todas las celdas que aún no contienen el sufijo en los nombres de celda de la columna C?

ingrese la descripción de la imagen aquí

Por el momento, la única forma en que puedo hacerlo es agregar _01 al final de la primera celda (comenzando _01) y arrastrar la celda hacia abajo para que rellene automáticamente el resto de los números en orden ascendente (como se ve en la captura de pantalla a continuación).

ingrese la descripción de la imagen aquí

Intenté abrir el archivo en Notepad ++ para ver si hay una manera de hacerlo allí, pero desafortunadamente no trae los datos con columnas y en su lugar muestra todo el texto separado por comas en un estilo típico de bloc de notas. Necesito mantener el archivo en formato .csv para poder volver a importar los datos modificados en nuestro servidor de medios.

¿ Alguien sabe de alguna manera que tome XX_ de la columna B y lo agregue como _XX a las celdas que no lo tienen en la columna C? Estoy dispuesto a probar esto en cualquier software que no sea Excel. He usado notepad ++ para este tipo de cosas en el pasado, pero nunca con archivos csv y no estoy seguro de si el documento saldrá correctamente formateado después.

Columna B:

16_9S0816YE556_GOPR0091_0S01
17_9S0816YE556_GOPR0091_1S01
18_9S0816YE556_GOPR0091_2S01
19_9S0816YE556_GOPR0091_3S01
01_9S0803SD006MN_C0001S01
02_9S0803SD006MN_C0002S01
03_9S0813ED095MN_8R7A3425S01
04_9S0813SD007MN_C0001S01

Columna C:

9S0815GP174_16
9S0815GP174_17
9S0815GP174_18
9S0815GP174_19
9S0816GP175
9S0816GP175
9S0816GP175
9S0816GP175

Resultado final deseado para la columna C ( sin afectar las primeras cuatro celdas ):

9S0815GP174_16
9S0815GP174_17
9S0815GP174_18
9S0815GP174_19
9S0816GP175_01
9S0816GP175_02
9S0816GP175_03
9S0816GP175_04

Gracias.

Myles
fuente
Recomiendo usar el instrumento adecuado. Trabaja con una matriz de datos, por lo tanto, use cualquier base de datos para almacenar y procesar datos. MS Access, por ejemplo ... piénselo al menos.
Akina
No estoy seguro de si el documento saldrá correctamente formateado después. No pienses en eso. Use CSV con un separador (no de longitud fija) usando el símbolo de espacio como separador y la opción 'separador múltiple como uno' cuando vuelva a importar a Excel.
Akina
Lo siento, no estoy siguiendo lo que quieres decir aquí.
Myles
Suponiendo que solo necesita los dos primeros dígitos de B, agregue al final de C y puede usar una columna auxiliar y luego intente esta fórmula: = C1 & "_" & LEFT (B1; 2)
Kevin Anthony Oppegaard Rose
1
Hola Kevin, ¿afectará esto a todas las celdas o solo a las que no tienen '_XX'? No quiero agregar los números al final de las celdas que ya los tienen.
Myles

Respuestas:

1

Con Notepad ++, puedes hacer:

  • Ctrl+H
  • Encontrar que: ^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),
  • Reemplazar con: $1_$2,
  • comprobar Ajustar
  • comprobar expresión regular
  • Replace all

Explicación:

^           : beginning of line
(           : start group 1
  [^,]*     : 0 or more non comma character
  ,         : 1 comma
  (\d\d)    : group 2, 2 digits
  _         : underscore
  [^,]*     : 0 or more non comma character
  ,         : 1 comma
  [^,]*     : 0 or more non comma character
)           : end group 1
(?<!        : negative lookbehind, make sure we don't have before the comma
    _\d\d   : underscore and 2 digits
)           : end lookbehind
,           : a comma

Resultado para el ejemplo dado:

col_A,16_9S0816YE556_GOPR0091_0S01,9S0815GP174_16,col_D
col_A,17_9S0816YE556_GOPR0091_1S01,9S0815GP174_17,col_D
col_A,18_9S0816YE556_GOPR0091_2S01,9S0815GP174_18,col_D
col_A,19_9S0816YE556_GOPR0091_3S01,9S0815GP174_19,col_D
col_A,01_9S0803SD006MN_C0001S01,9S0816GP175_01,col_D
col_A,02_9S0803SD006MN_C0002S01,9S0816GP175_02,col_D
col_A,03_9S0813ED095MN_8R7A3425S01,9S0816GP175_03,col_D
col_A,04_9S0813SD007MN_C0001S01,9S0816GP175_04,col_D
Toto
fuente
¡Excelente! Gracias Toto, sabía que un experto en Notepad ++ volaría y me salvaría. Esto funcionó e hizo exactamente lo que quiero! ¡Gracias otra véz! ¡Pregunta votada y contestada!
Myles
0

Si tiene Excel 2016, use las herramientas de potencia Get & Transform de Microsoft para obtener una nueva tabla con la columna correcta,. (Para Excel 2010-2013, use el complemento gratuito MS Query Power para Excel ).

Eventualmente puede conectarse directamente a la fuente (archivo csv, base de datos, archivo Excel, ...) y realizar una transformación como esta (he mantenido las columnas usadas, que se pueden eliminar mediante un paso adicional antes de cargarlo en un hoja, lámina):

ingrese la descripción de la imagen aquí

Aquí el código M generado por la interfaz de usuario.

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}}),
    #"Add Col: Col2 Text before delimiter" = Table.AddColumn(#"Changed Type", "Col2 TextBeforeDelimiter", each Text.BeforeDelimiter([Column2], "_"), type text),
    #"Add Col: Col3 Text after delimiter" = Table.AddColumn(#"Add Col: Col2 Text before delimiter", "Col3 TextAfterDelimiter", each Text.AfterDelimiter([Column3], "_"), type text),
    #"Added Custom" = Table.AddColumn(#"Add Col: Col3 Text after delimiter", "Check Number", each [Col2 TextBeforeDelimiter] = [Col3 TextAfterDelimiter]),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Col3 Transformed", each if [Check Number] = true then [Column3] else [Column3] & "_" & [Col2 TextBeforeDelimiter])
in
    #"Added Custom1"
visu-l
fuente