Mostrando entradas con la etiqueta Fichero de texto. Mostrar todas las entradas
Mostrando entradas con la etiqueta Fichero de texto. Mostrar todas las entradas

2017-12-12

Abrir ficheros de texto en Excel arrastrándolos y soltándolos

Problema

Deseamos abrir rápidamente un fichero de texto (csv o txt), sin necesidad de importarlo desde la pestaña de Datos.

Solución

Simplemente arrastramos el fichero y lo soltamos sobre cualquier fichero Excel abierto o el icono de Excel en la barra de tareas. Excel creará automáticamente otro libro temporal con el contenido del fichero de texto.

Si la extensión del fichero está vinculada a Excel también podemos hacer doble clic sobre el mismo. También si no está vinculado podremos elegir Excel en Abrir con, si lo hemos hecho anteriormente.

Entradas relacionadas

2015-06-12

Añadir programáticamente comentarios a ficheros de texto en R

Title

Problema

Queremos añadir programáticamente comentarios dentro de nuestros ficheros de texto. De esta manera podremos autodocumentarlos. Cuando importemos los ficheros R importará solamente los datos, no los comentarios.

Solución

Como ejemplo, creamos en nuestro directorio de trabajo el fichero arboles.csv con el data frame trees.

# Dos modos. Sin nombres de fila.
write.table(trees, "arboles.csv",  sep = ",", row.names = FALSE)
write.csv(trees, "arboles.csv", row.names = FALSE)
Abrimos un editor de texto y precedemos cada línea del comentario con el símbolo almohadilla: #.

Importamos el fichero, read.table considera por defecto como comentarios aquellas líneas precedidas de #. En el caso de read.csv es necesario explicitarlo.

arboles <- read.table("arboles.csv", header = TRUE, sep = ",")
arboles <- read.csv("arboles.csv", comment.char = "#")
Inspeccionamos el resultado, apreciando que los comentarios han sido ignorados. Para ver los mismos abrimos el fichero con el editor de texto.

head(arboles)
  Girth Height Volume
1   8.3     70   10.3
2   8.6     65   10.3
3   8.8     63   10.2
4  10.5     72   16.4
5  10.7     81   18.8
6  10.8     83   19.7
Leemos los comentarios del fichero de texto en la consola

grep("^#", readLines("arboles.csv"), value = TRUE)
[1] "# trees {datasets}"                                             
[2] "# Girth, Height and Volume for Black Cherry Trees"              
[3] "# Description"                                                  
[4] "# This data set provides measurements of the girth, "           
[5] "# height and volume of timber in 31 felled black cherry trees. "
[6] "# Note that girth is the diameter of the tree (in inches) "     
[7] "# measured at 4 ft 6 in above the ground."    

Notas

Podemos usar el mismo procedimiento anterior con las funciones read.csv2, read.delim y read.delim2.

En nuestro ejemplo hemos puesto los comentarios encima del encabezados de las columnas, pero pueden ser insertados en cualquier línea nueva, también entre registros. R los interpretará como comentarios y los ignorará.

Referencias

2015-06-05

Añadir manualmente comentarios a ficheros de texto en R

Title

Problema

Queremos añadir comentarios dentro de nuestros ficheros de texto. De esta manera podremos autodocumentarlos. Cuando importemos los ficheros, R importará solamente los datos, no los comentarios.

Solución

Como ejemplo, creamos en nuestro directorio de trabajo el fichero arboles.csv con el data frame trees.

# Dos modos. Sin nombres de fila.
write.table(trees, "arboles.csv",  sep = ",", row.names = FALSE)
write.csv(trees, "arboles.csv", row.names = FALSE)
Abrimos un editor de texto y precedemos cada línea del comentario con el símbolo almohadilla: #.

Importamos el fichero, read.table considera por defecto como comentarios aquellas líneas precedidas de #. En el caso de read.csv es necesario explicitarlo con el argumento comment.char.

arboles <- read.table("arboles.csv", header = TRUE, sep = ",")
arboles <- read.csv("arboles.csv", comment.char = "#")
Inspeccionamos el resultado. Se aprecia que los comentarios han sido ignorados. Para ver los mismos, abrimos el fichero con el editor de texto.

head(arboles)
  Girth Height Volume
1   8.3     70   10.3
2   8.6     65   10.3
3   8.8     63   10.2
4  10.5     72   16.4
5  10.7     81   18.8
6  10.8     83   19.7

Notas

Podemos usar el mismo procedimiento anterior con las funciones read.csv2, read.delim y read.delim2.

En nuestro ejemplo hemos puesto los comentarios encima del encabezados de las columnas, pero pueden ser insertados en cualquier línea nueva, también entre registros. R los interpretará como comentarios y los ignorará.

Referencias

2014-12-12

Reemplazar carácter en un fichero de texto con VBA en Excel cuadro diálogo

Title Anteriormente vimos como reemplazar carácter en un fichero de texto con VBA en Excel. En esta ocasión, en lugar de especificar en nuestro código la ruta y nombre del fichero, lo seleccionamos mediante un cuadro de diálogo. El nuevo fichero con el sufijo _final se creará en la misma ruta del fichero seleccionado.

Public Sub ReemplazarCaracteresExcel()

Application.ScreenUpdating = False
Set wb = Workbooks.Open(Filename:=Application.GetOpenFilename)
Ruta = ActiveWorkbook.FullName
RutaSinExtension = Left(Ruta, InStrRev(Ruta, ".") - 1)
wb.Close False

Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Ruta) Then
    Set objStream = fso.OpenTextFile(Ruta, 1, False, 0)
End If
    Set ObjCopy = fso.CreateTextFile(RutaSinExtension & "_final." & Right(Ruta, 3))

For x = 1 To 5  'Salta el nº de líneas indicadas: 5
   objStream.readline
Next x
 
Do While Not objStream.AtEndOfStream
    strOldLine = objStream.readline
    i = 1
    newarray = Split(strOldLine, ",") 'Carácter reemplazado: ,
       strNewLine = newarray(0)
       
    Do Until i = UBound(newarray) + 1
         strNewLine = strNewLine & ";" & newarray(i) 'Carácter nuevo: ;
         i = i + 1
    Loop
    ObjCopy.WriteLine strNewLine
Loop
Application.ScreenUpdating = True
MsgBox "Fichero creado: " & RutaSinExtension & "_final." & Right(Ruta, 3)

End Sub
Borramos estas 3 líneas en el caso de que en el fichero de texto no haya que saltarse líneas en blanco y que provocarían un error:

For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x

Entradas relacionadas:

2014-05-09

Importar ficheros CSV en Excel mediante VBA

Title En Excel, una de las opciones para importar un fichero de texto es conectarse a él (obtener datos externos) mediante el asistente para importar texto: Alt+D+F+X. El conectarnos a datos externos en lugar de abrirlos, nos permitirá poder actualizarlos en el futuro.

Si queremos automatizar este proceso y evitar el uso repetido del asistente, podemos emplear un código similar al que he creado:

Importar CSV seleccionándolo con un cuadro de diálogo

Sub ImportarCSV()
    Dim t As Single
    t = Timer
    Sheets("DATOS").Cells.ClearContents
    strFile = Application.GetOpenFilename("CSV, *.csv")
        If strFile = Empty Then
           Response = MsgBox("Ningún fichero seleccionado", _
           vbOKOnly, "Error")
        Exit Sub
        Else
        End If

    With Sheets("DATOS").QueryTables.Add(Connection:= _
        "TEXT;" & strFile _
        , Destination:=Sheets("DATOS").Range("$A$1"))
        .Name = "fichero"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True 'CSV: punto y coma
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1) '5 columnas
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    MsgBox Timer - t
End Sub
En la primera parte iniciamos el cronómetro. Limpia los contenidos de la hoja DATOS en la que importaremos el fichero de texto CSV desde la celda A1. Abre un cuadro de diálogo que nos permite seleccionar el fichero a importar y nos alerta si no seleccionamos ninguno. Finalmente, importa el fichero de texto delimitado por punto y coma de 5 columnas, y nos indica el tiempo empleado en la importación.

Deliberadamente he dejado todas las propiedades que se detallan al grabar una macro usando el asistente de importación. Sin entrar a explicar todas las propiedades del objeto QueryTable, que casi se explican por sí solas, vamos a detenernos en tres:

.RefreshStyle Establece cómo se agregan o eliminan filas de la hoja de cálculo especificada. Si se sobreescriben las filas o no.
.TextFileStartRow Nos permite especificar la fila a partir de la que comienza la importación. Es 1 por defecto.
.TextFileColumnDataTypes Para especificar los tipos de datos de las columnas importadas mediante constantes. El 1 (xlGeneralFormat) las importa con formato general y el 9 (xlSkipColumn) para saltar esa columna. Ej.: TextFileColumnDataTypes = Array(1, 9, 1, 1, 1) saltaría la segunda columna. Si especifica más elementos para la matriz que columnas disponibles, se omiten esos valores.

Anexar nuevos CSV

Además, si necesitamos anexar nuevos ficheros CSV (asumimos la misma estructura que el anterior) podemos usar el siguiente código:

Sub AnexarCSV()
    Dim t As Single
    t = Timer
    Sheets("DATOS").Select
    Dim LastRow As Long
    LastRow = Range("A1").End(xlDown).Row + 1

    With Sheets("DATOS").QueryTables.Add(Connection:= _
        "TEXT;" & ThisWorkbook.Path & "\fichero.csv" _
        , Destination:=Sheets("DATOS").Range("A" & LastRow))
        .Name = "fichero"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertEntireRows ' Inserta filas
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 2 ' Salta 1ª línea con encabezado
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = True 'CSV: punto y coma
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    MsgBox Timer - t
End Sub
En la primera parte iniciamos el cronómetro. Identificamos la última fila escrita e importamos el CSV que de copiará a partir de la fila previamente identificada. En este caso, en lugar de elegir el fichero con un cuadro de diálogo, se trata del fichero.txt ubicado en la misma ruta que nuestro Excel. Finalmente, nos indica el tiempo empleado en la importación.

En cualquier caso, si deseamos indicar manualmente la ruta del fichero y que se copie en la hoja activa, basta con sustituir las tres líneas desde With y a .Name por estas:

With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\TU_RUTA_CORRESPONDIENTE\fichero.csv", _ 
Destination:=Range("$A$1"))

2014-04-18

Exportar tabla o consulta de Access como CSV

Title Exportar los distintos objetos de Access, tablas, consultas, formularios e informes es relativamente sencillo a través del asistente para la exportación. Puedes encontrar instrucciones detalladas en exportar datos a un archivo de texto

Un aspecto interesante es guardar las especificaciones de exportación para usarlas más adelante, bien en una macro o bien dentro de un módulo de VBA. Vemos a continuación un ejemplo suponiendo que el tipo de fichero que deseamos exportar es (*.csv).

1. Guardar la especificación de exportación.
2. En el diseño de la macro clic sobre Mostrar todas las acciones y seleccionar TransferirTexto. En argumentos de la acción indicamos los parámetros requeridos:


Tipo de transferencia: Exportar delimitado
Nombre de las especificación: estará disponible la especificación previamente guardada.
Nombre de la tabla, o del objeto que deseamos exportar.
Nombre del archivo: ruta completa del archivo de texto al que se va a exportar.
Contiene nombres de campo: sí.
Las dos últimos parámetros no son necesarios en este caso.

En VBA:

Function ExportarCSV()
DoCmd.TransferText acExportDelim, "Especificacion1", "Tabla1", "C:\Ruta\Tabla1.csv", True, ""
End Function
Entradas relacionadas:
Importar una especificación de importación/exportación en Ms Access: dos métodos
Más entradas de especificación de importación/exportación

2014-04-01

Exportar tabla como archivo de texto sin truncar los decimales

Title
Si en Access tratamos de exportar una tabla a un archivo de texto, los campos numéricos exportados conservarán como máximo 2 decimales. Para evitar que se trunque el campo, creamos una consulta en la que especificaremos el número de decimales del campo.

Por ejemplo, para conservar 6 decimales del CampoNumerico:

1. Creamos una consulta con el campo:

Campo: Format([Tabla1]![CampoNumerico];"0,000000")
2. Guardamos la consulta.
3. Exportamos la consulta, la seleccionamos y:
  • Botón secundario del ratón > Exportar > Archivo de texto; o bien
  • En la ficha Datos externos, en el grupo Exportar, Archivo de texto:

Entradas relacionadas

2014-03-09

Reemplazar carácter en un fichero de texto con VBA en Excel

Es frecuente encontrarnos con el problema de tener un fichero de texto delimitado por comas cuando necesitamos que el delimitador sea el punto y coma. En una entrada anterior vimos como reemplazar un carácter en un fichero de texto con VBA en Access.

En Excel tenemos dos alternativas:

1. Usar el mismo Excel, Bloc de notas, u otro editor de texto como Notepad++, para reemplazar un carácter por otro. Cuando el número de ocurrencias es muy grande, millones en el caso de fichero de tamaño considerable, el proceso puede ser algo lento.

2. Utilizar código de VBA acelerando el proceso notablemente, evitando tener que abrir otros programas, reduciendo la probabilidad de errores y pudiendo llamarlo desde una macro u otro módulo.

Copiamos el siguiente código en un módulo de Ms Excel:

Public Sub ReemplazarCaracteresExcel()

Dim folderPath As String
folderPath = ThisWorkbook.Path & "\" 'Ruta del Excel

Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(folderPath & "Inicial.csv") Then
    Set objStream = fso.OpenTextFile(folderPath & "Inicial.csv", 1, False, 0)
End If
    Set objCopy = fso.CreateTextFile(folderPath & "Final.csv")

For x = 1 To 5  'Se salta el nº de líneas indicadas: 5
    objStream.readline
Next x
 
Do While Not objStream.AtEndOfStream
    strOldLine = objStream.readline
    i = 1
    NewArray = Split(strOldLine, ",") 'Carácter reemplazado: ,
       strNewLine = NewArray(0)
       
    Do Until i = UBound(NewArray) + 1
         strNewLine = strNewLine & ";" & NewArray(i) 'Carácter nuevo: ;
         i = i + 1
    Loop
    objCopy.WriteLine strNewLine
Loop

End Sub
Notas: El fichero Inicial.csv debe de estar en la misma ruta del Excel. El fichero Final.csv se creará automáticamente. Borrar estas 3 líneas en el caso de que en el fichero de texto no haya que saltarse líneas en blanco y que provocarían un error:

For x = 1 To 5  'Se salta el nº de líneas indicadas 
    objStream.readline
Next x
También se puede usar este código para ficheros *txt. Ejemplo: Inicial.txt y Final.txt

Entradas relacionadas

Nube de datos