elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Extraer columnas de un csv separado por |
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Extraer columnas de un csv separado por |  (Leído 4,898 veces)
Pisangas

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Extraer columnas de un csv separado por |
« en: 20 Diciembre 2017, 22:13 pm »

Buenas tardes,

alguien me puede colaborar, tengo un archivo csv separado por | del cual solo me interesan algunas columnas, existe alguna manera a traves de un bat de extraer esta data a otro archivo txt.


En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.806



Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #1 en: 21 Diciembre 2017, 12:42 pm »

alguien me puede colaborar, tengo un archivo csv separado por | del cual solo me interesan algunas columnas, existe alguna manera a traves de un bat de extraer esta data a otro archivo txt.

Desde siempre ha existido el mal hábito, ignorancia o la desinformación de pensar que Batch es un lenguaje de programación, que sirve para todo y que es la mejor solución y la solución más sencilla ante cualquier problema programático... pero NO, ninguna de esas declaraciones es cierta, y mucho menos cuando de trata de llevar a cabo un parsing de datos para parsear un formato específico (una tabla CSV) ya que Batch no provee ninguna funcionalidad built-in para ello, es muy limito e ineficiente, así que tendrías que usar un bucle de tipo For /F para parsear el contenido del texto y delimitar palabras mediante el uso de tokens. Se puede hacer en Batch, por supuesto, pero hacerlo sería muy tedioso (demasiado tiempo de desarrollo en comparación con cualquier otro lenguaje de verdad), y dando como resultado un código engorroso y poco eficiente en ciertos escenarios.

En otras palabras, no vale la pena ni molestarse en intentar hacerlo en Batch habiendo mejores opciones, sí, me estoy refiriendo a PowerShell...

Te explico. Teniendo un CSV con este contenido:

File.csv
Código:
Product|Price|Amount
Broccoli|75|1
Carrots|122|2
Beans|350|3

Puedes usar PowerShell de la siguiente manera para importar una tabla CSV desde un archivo, "extraer" las columnas que quieras, y opcionálmente crear una simple interfáz gráfica con un gridview para mostrar el resultado:

Script.ps1
Código
  1. $csv     = Import-Csv -Path "C:\File.csv" -Delimiter "|" -Encoding "Default"
  2. $columns = ($csv | select "Product","Price")
  3.  
  4. $columns | Out-GridView -PassThru -Title "Title"
  5.  
  6. #$products = ($columns).Product
  7. #ForEach ($product in $products){
  8. #  Write-host $product
  9. #}
  10.  
  11. #$prices = ($columns).Price
  12. #ForEach ($price in $prices){
  13. #  Write-host $price
  14. #}



PD: las lineas de código comentadas son para demostrarte como puedes hacer una iteración de las celdas de una columna específica.

Saludos.


« Última modificación: 21 Diciembre 2017, 12:49 pm por Eleкtro » En línea

Pisangas

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #2 en: 21 Diciembre 2017, 14:22 pm »

Parce tenes razón, tal vez ignorancia en el tema, casi no me involucro mucho con estos temas, pero tratare de conocerlo un poco mas, te agradezco profundamente tomes tiempo de tu día en responder las inquietudes, muy agradecido, con lo que me das me arreglas la vida.
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.806



Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #3 en: 21 Diciembre 2017, 14:32 pm »

Parce tenes razón, tal vez ignorancia en el tema, casi no me involucro mucho con estos temas, pero tratare de conocerlo un poco mas, te agradezco profundamente tomes tiempo de tu día en responder las inquietudes, muy agradecido, con lo que me das me arreglas la vida.

Ahora has hecho que me sienta mal :P, no sé ya como habrá sonado lo que dije, pero me gustaría aclararlo:

lo de ignorante no lo decia por ti, solo estaba generalizando, quise decir que existe una ignorancia global, por que Batch está sobrevalorado por el 90% de los usuarios informáticos (por decir una cifra aleatoria pero realista), que por un motivo o por otro desconocen el resto de opciones a su alcance (como Powershell), y entonces, sin darse cuenta caen en el "error", por que se empeñan en hacer cosas con Batch para las cuales Batch sencillamente no está capacitado (o en algunos casos si, pero no vale la pena debido al consumo de tiempo y la ineficacia de esa herramienta).

No te lo tomes a mal, no era mi intención llamarte ignorante de forma despectiva ni nada parecido, tampoco me estaba refiriendo a ti. Y la gran mayoria hemos empezado a programar en Windows creyendo que Batch era una buena herramienta de programación, yo incluido.

En fin, espero que el código que te mostré te haya servido, lo puedes ejecutar como si se tratase de un archivo.bat, pero con extensión .ps1.

Un saludo.
« Última modificación: 21 Diciembre 2017, 14:34 pm por Eleкtro » En línea

Pisangas

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #4 en: 21 Diciembre 2017, 15:26 pm »

Todo bien, para nada, no soy programador, pero como buen ingeniero ante un problema me toca buscar solución.

Reitero mi agradecimiento y no me sentí ofendido para nada, me diste prácticamente la solución al caso.

Ahora bien, te cuento como me fue, me empape un poco de Power Shell y trate de implementar mi solución, luego de sortear una serie de errores pero quedo así

$csv     = Import-Csv -Path "C:\md5\PNN.csv" -Delimiter "|"
$columns = ($csv | select "DATO1","DATO2")
 
$columns | Out-GridView

Quite ciertos parámetros por que a pesar de que existen, el power shell no me los reconocía tales como -ENCODING y -PassThru con esos parámetros me arroja una respuesta "A parameter cannot be found that matches parameter name...."

La verdad no se el por que el mensaje, si en la sintaxis del Power Shell si los encontré.... en fin los elimine, ya puedo tener las columnas que deseo por separado.

Parce Elektro mil gracias.
En línea

Pisangas

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #5 en: 21 Diciembre 2017, 15:50 pm »

este Power Shell esta como útil también termine exportandolo a un archivo csv. Con esto solucione mi caso.

gracias.

$csv     = Import-Csv -Path "C:\xx\yy.csv" -Delimiter "|"
$columns = ($csv | select "DATO1","DATO2")
 
$columns | Out-File C:\xx\yy.csv
En línea

Pisangas

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #6 en: 21 Diciembre 2017, 15:53 pm »

preferi  export-CSV este me lo envia separado por comas


$csv     = Import-Csv -Path "C:\xx\yy.csv" -Delimiter "|"
$columns = ($csv | select "DATO1","DATO2")
 
$columns | export-CSV C:\xx\yy.csv

Aprendi mucho  :laugh:
En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.806



Ver Perfil
Re: Extraer columnas de un csv separado por |
« Respuesta #7 en: 21 Diciembre 2017, 18:13 pm »

Quite ciertos parámetros por que a pesar de que existen, el power shell no me los reconocía tales como -ENCODING y -PassThru con esos parámetros me arroja una respuesta "A parameter cannot be found that matches parameter name...."

La disponibilidad de algunos parámetros depende de la versión de PowerShell que tengas instalada en tu sistema operativo, ya que en cada nueva versión de Windows viene integrada una versión más reciente de PowerShell con más funcionalidades.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Extraer voz de un archivo o extraer la musica solamente !!!!!
Multimedia
magnox 2 3,659 Último mensaje 28 Septiembre 2004, 17:16 pm
por theloop
Se puede empacar una dll por separado.
Ingeniería Inversa
Ferсhu 4 2,875 Último mensaje 25 Noviembre 2007, 03:09 am
por Ferсhu
Como compilar clases por separado [?]
Programación C/C++
.:BlackCoder:. 1 4,793 Último mensaje 28 Abril 2010, 05:42 am
por Littlehorse
mostrar datos de tabla por separado
PHP
elquenosabe 0 1,500 Último mensaje 30 Julio 2010, 21:04 pm
por elquenosabe
Active Directory y DNS por separado ?
Redes
<<<-Basura->>> 4 3,479 Último mensaje 23 Marzo 2012, 06:28 am
por <<<-Basura->>>
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines