Título: Recortar caracteres Publicado por: Eliza_loaeza en 20 Octubre 2015, 07:59 am Hola que tal, solicito de su ayuda con este problema estoy trabajando con vb y estoy cargando el contenido de un archivo .csv ejemplo
Código: "652394532592467968,"","","2015-10-09 08:05:52 +0000","Twitter Web Client","Hay ocasiones en la que mejor prevalecer #Sisepuede y seguir adelante.","","","","" en el archivo tengo aprox 1000 lineas, lo que quiero hacer es recortar todo y que solo quede el texto y pueda mostrarlo en un listbox Hay ocasiones en la que mejor prevalecer #Sisepuede y seguir adelante Ojala puedan ayudarme saludos Título: Re: Recortar caracteres Publicado por: Lekim en 20 Octubre 2015, 20:45 pm Hola Eliza
Estaba intentado resolver tu problema hasta que me he dado cuenta de una cosa, y es que la cadena que muestra no tiene ningún sentido: Código: "652394532592467968,"","","2015-10-09 08:05:52 +0000","Twitter Web Client","Hay ocasiones en la que mejor prevalecer #Sisepuede y seguir adelante." ¿De verdad esto es así? Porque yo he buscado este tipo de archivo que nombras *.csv y no tienen ese formato. Esto lo he sacado de WIN32API.CSV: Código: Element Name,Windows NT,Windows,Windows CE,Win32s,Component,Component Version,Header File,Import Library,Unicode,Element Type Creo que el archivo que intentas abrir se ha creado utilizando Open/For Append y Write. Este método crea los archivos con comillas: Código: NumFile = FreeFile Se obtiene un archivo con el texto: Código: "10-20-2015","23:30:13","23:30:13","00:00:00" Ahora al intentar leerlo la cosa se te complica. Para leerlo se hace de la siguiente manera: Código: NumFile = FreeFile Ejemplo: Código
Voy a proponerte otra manera y luego si puedes me comentas si te sirve. Saludos Pues lo prometido es deuda. Este código lee un archivo CSV (normal, sin comillas) e introduce línea por línea en un ListBox Código
Para guardar una archivo de texto (sin que se creen comillas) puedes usar esto: Código
Para llamarlo: Código
y si va a ser CSV Código
Espero que te sirva ;) Título: Re: Recortar caracteres Publicado por: Eliza_loaeza en 21 Octubre 2015, 05:29 am Hola Lekim Gracias por contestar
Asi es como cargo el archivo Código
lo envio a un listbox, lo que intento hacer es antes de cargar el archivo poder cortarlo. me ha servido de mucho tu informacion gracias saludos. ;-) Mod: Los códigos deben ir en etiquetas GeSHi, esto es .NET, movido Título: Re: Recortar caracteres Publicado por: Eleкtro en 21 Octubre 2015, 07:17 am Primero de nada, lee atentamente la nota que un compañero moderador te dejó en tu último comentario:
Cita de: Engel Lex Mod: Los códigos deben ir en etiquetas GeSHi, esto es .NET, movido Debes seguir las normas del foro. Código: "652394532592467968,"","","2015-10-09 08:05:52 +0000","Twitter Web Client","Hay ocasiones en la que mejor prevalecer #Sisepuede y seguir adelante.","","","","" El formato es inteligible si nos rejimos por un estándar, ya que todos los campos están cerrados por comillas dobles excepto el primer campo, donde en la primera linea o columna contiene una comilla doble (que no dos) así que el campo no está cerrado/delimitado, y en el de la segunda linea no contiene comillas. ¿Realmente eso lo tienes así o has cometido un fallo al publicar el ejemplo?. ¿Que significa para ti "recortarlo"?. Intenta ser más específico, ¿te refieres a partir el string en varios tokens/partes?. Tampoco está claro si en el listbox estás intentando añadir las lineas completas o solamente los campos de alguna columna del CSV. Da más detalles. . . Si quieres partir el archivo en un array de lineas o strings entonces puedes utilizar la función System.IO.File.ReadAllLines (o en su defecto la extensión String.Split): Código
Para otro tipo de tareas, como por ejemplo obtener todos los campos de una sola columna de la tabla CSV, puedes utilizar la class Microsoft.VisualBasic.FileIO.TextFieldParser: Código
PD: No recomiendo recurrir a los miembros del namespace Microsoft.VisualBasic excepto para esta ocasión, ya que aparte de que no existe un equivalente en el resto de miembros de la librería de clases de .Net Framework, es tontería ponerse a reinventar la rueda desarrollando un parser de formato CSV. Siempre puedes utilizar librerías de terceros para .Net, como por ejemplo: https://github.com/JoshClose/CsvHelper o http://www.filehelpers.net/ De todas formas el desarollo de un parser específico para la tarea que requieres en cuestión, sería muy sencillo, pero no está del todo claro lo que pretendes. Saludos Título: Re: Recortar caracteres Publicado por: Eliza_loaeza en 21 Octubre 2015, 07:36 am disculpa.
si es el archivo que descarga por defecto twitter, de estas lineas solo intento sacar los puros comentarios y eliminar el resto. Título: Re: Recortar caracteres Publicado por: Eleкtro en 21 Octubre 2015, 08:01 am de estas lineas solo intento sacar los puros comentarios y eliminar el resto. Entonces puedes hacer esto, usando LINQ (por ejemplo): Código
Nota: Habría que comprobar como están escapados los caracteres ilegales, igual que el caracter de la coma. Saludos Título: Re: Recortar caracteres Publicado por: Lekim en 21 Octubre 2015, 09:21 am A partir de ahora en VB voy a preguntar si es para VB6 o para VB.NET :-\
Siempre pasa igual :( Los primero y antes de nada pon código, así sabremos que lenguaje usas o bien especifique que es para VB.NET. Pero mantengo lo que dije pues he buscado ese tipo de archivos CSV, y hasta se pueden abrir con el notepad y son perfectamente legibles y sin comillas. No se quizás hay varios formatos. Y también estoy de acuerdo con electro en que habría que ver como está escrito el texto, donde están las comas. Si no me equivoco debería ser algo similar a esto: Código: Element Name,Windows NT,Windows,Windows CE,Win32s,Component,Component Version,Header File,Import Library,Unicode,Element Type Código: Job #, goURL, Reason, Destination Título: Re: Recortar caracteres Publicado por: Eleкtro en 21 Octubre 2015, 10:04 am Pero mantengo lo que dije pues he buscado ese tipo de archivos CSV, y hasta se pueden abrir con el notepad y son perfectamente legibles y sin comillas. No se quizás hay varios formatos. Te explico, un archivo CSV o Comma-separated values, es un archivo de texto plano el cual, como su propia definición indica, está delimitado por comas (u otro caracter). No le des más vueltas xD. Imagínate la siguiente tabla pero representada en un archivo de texto, pues las comas o caracter delimitador se usarían para separar los campos y así poder identificar a que columna pertenecen. (https://perishablepress.com/wp/wp-content/images/2010/misc-chunks/csv-user-data-example.gif) Archivo.csv Código: ; Columnas Nota(s): La primera linea a veces se utiliza para delimitar el nombre de las columnas, simplemente depende de la forma en la que quieras parsear el archivo, es decir, se asume que existen nombres de columnas o se asume lo contrario. Las lineas que empiezan con ";" serían lineas de comentario, que podría ser cualquier otro caracter excepto el caracter delimitador. estoy de acuerdo con electro en que habría que ver como está escrito el texto, donde están las comas. Si no me equivoco debería ser algo similar a esto Creo que no entendiste bien lo que quise decir. En el ejemplo del CSV de Twitter, los campos esán separados por comas, y cada campo está encerrado entre comillas dobles, pues bien, dentro de ese string encerrado cabe la posibilidad de que también contenga comas por el simple hecho de que en Twitter un usuario puede escribir comentarios utilizando comas, pero claro, ese caracter especial estará codificado/escapado para no crear conflictos con la delimitación de los campos. El caso es que para que en la transformación del string/comentario no queden "residuous" de caracteres codificados habria que comprobar si Twitter usa codificación html normal o no para ese caracter de la coma, y yo no lo he comprobado por que ...en fin, por que no voy a ponerme a buscar comentarios que tengan comas en Twitter xD. Saludos! Título: Re: Recortar caracteres Publicado por: Lekim en 21 Octubre 2015, 10:20 am En cualquier caso el método par leerlo debe ser un equivalente al Input (debería haberlo), en VB6 pero desde VB.NET.
Si te fijas: Código: Element Name,Windows NT,Windows,Windows CE,Win32s,Component,Component Version,Header File,Import Library,Unicode,Element Type Aunque se vea desordenado sigue una lógica: Código: Dato1,Dato2,Dato3,Dato4,Dato5,...,Dato11 Donde ,, es un espacio nulo es decir DatoX= "" Y si su archivo lo muestra así: Código: "Dato1","Dato2","Dato3","Dato4","Dato5",...,"Dato11" Viene a ser lo mismo. Luego el sistema para leerlo debe ser similar al Input en VB. Los archivos CSV que tengo yo, no son como los que pones de ejemplo. De hecho al abrirlo con el Excel se muestra todo en la misma columna tal cual como está en el archivo con comas y todo. Por eso digo que debe haber varios formatos con misma extensión. Tengo clarísimo que los ejemplos que he puesto yo se han creado y se leen siguiendo un sistema similar al Input en VB6. Y por el ejemplo que ha puesto ella también deben ir por ahí los tiros. Saludos Utilizando el excel me he creado mi propio archivo y se ha creado de la siguiente manera Código: 1;124;9789 En el Excel son 9 filas y 3 columnas. Luego está claro que, todo depende del sistema para crear este tipo de archivo. como dices Código: un archivo CSV o Comma-separated values, es un archivo de texto plano el cual, como su propia definición indica, está delimitado por comas (u otro caracter) Yo creo que el de ella sigue un patrón IDÉNTICO al del Input en VB6 y no el Excel Ya no lo doy más vueltas :xD Título: Re: Recortar caracteres Publicado por: Eleкtro en 21 Octubre 2015, 12:27 pm Por eso digo que debe haber varios formatos con misma extensión. Lekim, lo vuelvo a explicar de otra manera: NO existen distintos tipos de formato CSV, un CSV es un archivo de TEXTO PLANO (archivo.txt) con la extensión modificada (archivo.csv) cuyo contenido está delimitado por comas u otro caracter que queda a elección de quien construye la tabla. No hay más misterio, el formato es texto plano o plain text. El único estándar del formato CSV es que los campos se delimiten mediante un caracter, en este caso la coma, y en el caso de tu Excel, el punto y coma. Luego hay factores adicionales como lineas de comentarios, columnas, delimitación de cadenas en los campos, etc.. Luego el sistema para leerlo debe ser similar al Input en VB. Tengo clarísimo que los ejemplos que he puesto yo se han creado y se leen siguiendo un sistema similar al Input en VB6. Pongamos claro que un CSV es un archivo de texto y NADA más, no ha sido especialmente diseñado o pensado para "leerse con VB", no tiene nada que ver una cosa con la otra, no lo mezclemos. La función Input de VB6 simplemente lee el string de entrada hasta que el siguiente caracter CR, CR-LF o "," se encuentra y entonces podemos tokenizar/partir el string de esa forma. Es basicamente lo mismo que podemos hacer con la extensión String.Split en VB.Net, de la siguiente manera: Código
La función Input de VB6 se puede encontrar en el namespace Microsoft.VisualBasic de la librería de clases de .Net Framework, la cual ovbiamente está re-escrita usando puro código .Net, sin embargo, aún así la función está deprecada u obsoleta al tener un impacto grave en el rendimiento de la app. (POR COSAS ASÍ NO ME CANSARÉ DE REPETIR QUE NO SE DEBE RECURRIR A NINGÚN MIEMBRO DE ESTE NAMESPACE VB6-ESTILIZADO) y se recomienda en su defecto utilizar los miembros de My.Computer.FileSystem, que viene siendo exactamente lo mismo que publiqué en el ejemplo de mi primer post en este hilo. Ejemplo: Código
Hablando estrictamente ese sería su equivalente, la class Microsoft.VisualBasic.FileIO.TextFieldParser. Pero en mi opinión personal es mejor recurrir a un simple For para construir la logica del parser y así evitar por completo la utilización de ese namespace, así que para mi el equivalente sería String.Split aunque sería bastante más elaborado que el For que he publicado, pero no voy a reinventar la rueda. Saludos! Título: Re: Recortar caracteres Publicado por: Lekim en 23 Octubre 2015, 01:20 am Hola Elektro
con todos los respetos SI que hay verios formatos para CSV. Tu mismo lo has dicho Código: un CSV es un archivo de TEXTO PLANO (archivo.txt) con la extensión modificada (archivo.csv) cuyo contenido está delimitado por comas u otro caracter que queda a elección de quien construye la tabla. Partiendo de esa base es el formato (de guardado o lectura) que tu le quieras dar y no me refiero a la forma de compresión o codificación máquina del archivo (quizás debí especificar más). Por lo que se ha visto puede ser el de punto y coma que usa Excel ';', o simplemente separación por comas o las comillas y cada grupo de datos de forma lineal. Y el sistema es crear separaciones de datos por estos signos sean ;, , o "","", como delimitadores entre un dato y otro. Cuando digo formato me refiero a diferentes formas de crear o interpretar la información del archivo. No se me ocurre otra palabra. En cuanto el equivalente a Input en .Net que expones tengo algunas ideas y me va a ser muy útil, gracias. Creo que eso justo es lo que necesita la persona que inició este tema. Título: Re: Recortar caracteres Publicado por: Eleкtro en 23 Octubre 2015, 10:56 am Entiendo lo que pretendes decir pero tecnica o estrictamente hablando usar comas o punto y comas es indiferente ya que ambos se consideran un delimitador de campos, por ende ambos entrarían dentro de lo que se conoce como "formato", en las especificaciones del formato.
(http://i.imgur.com/hxVf1la.png) De todas formas no llegariamos a nada con este debate por que si bien es cierto que no hay un estándar global... para mi es una cosa y para ti otra cosa o variación distinta xD. Dejemoslo en que ambos tenemos parte de razón. Fuente: ➢ Comma-separated values - Wikipedia (https://en.wikipedia.org/wiki/Comma-separated_values) Saludos! |