Abrir un archivo de texto delimitado por comas |
Por Enrique Martínez Montejo |
Última revisión: 06/03/2004 |
Si en nuestro sistema tenemos establecida una configuración regional de español, lo más seguro es que tengamos designada la coma como símbolo decimal, por lo que se nos presentará un problema a la hora de trabajar con un archivo de texto cuyos campos estén delimitados por comas.
La única solución existente mediante programación es recurrir a las funciones GetLocaleInfo y SetLocaleInfo de la API de Windows, para leer y modificar el símbolo decimal, restaurando los valores una vez hayamos leído el archivo de texto, que es lo que hace el ejemplo que nos ocupa en esta ocasión, el cual presupone que tenemos debidamente configurado un archivo de información de esquema Schema.ini en la misma carpeta donde se encuentre el archivo de texto que deseamos leer.
Para ejecutar el ejemplo necesitará insertar un control DataGrid en el formulario de inicio del proyecto. Copie y pegue el siguiente código en la sección Declaraciones del formulario de inicio del proyecto.
Option Explicit
Private Declare Function GetLocaleInfo
Lib "kernel32"
Alias _
"GetLocaleInfoA" (ByVal
Locale As
Long, _
ByVal LCType
As Long,
ByVal lpLCData
As String,
_
ByVal cchData
As Long)
As Long
Private
Declare Function
SetLocaleInfo
Lib "kernel32" Alias _
"SetLocaleInfoA" (ByVal
Locale As
Long, _
ByVal LCType
As Long,
ByVal lpLCData
As String)
As Long
Private
Sub Form_Load()
Dim
sSepDecimal1 As
String, sSepDecimal2 As
String
Dim
sBuffer As
String
Dim
dl As
Long
Dim
cnn As
ADODB.Connection
Dim
rst As
ADODB.Recordset
Const
LOCALE_USER_DEFAULT = &H400
On Error GoTo
ErrFormatoArchivo
' Guardamos el valor del Separador decimal
sBuffer = String(100, vbNullChar)
dl = GetLocaleInfo(LOCALE_USER_DEFAULT, &HE, sBuffer, 99)
sSepDecimal1 = Left(sBuffer, 1)
' Establecemos el nuevo separador decimal
dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &HE, ".")
' Guardamos el valor del Separador decimal monetario
sBuffer = String(100, vbNullChar)
dl = GetLocaleInfo(LOCALE_USER_DEFAULT, &H16, sBuffer, 99)
sSepDecimal2 = Left(sBuffer, 1)
' Establecemos el nuevo separador decimal monetario
dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &H16, ".")
' Creamos un nuevo objeto
Connection
Set cnn =
New ADODB.Connection
' Abrimos la conexión
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\Mis
documentos"
.Properties("Extended Properties") =
"TEXT;HDR=Yes"
.Open
End
With
' Creamos un nuevo objeto
Recordset
Set rst =
New ADODB.Recordset
' Configuramos y abrimos el
Recordset
With rst
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open "Nombre_Archivo#txt", cnn, , ,
adCmdTable
End
With
Set DataGrid1.DataSource = rst
ErrFormatoArchivo:
' Cualquier error deberá restaurar los valores de la
' configuración regional
'
' Restablecemos el separador decimal
dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &HE, sSepDecimal1)
' Restablecemos el separador decimal monetario
dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &H16, sSepDecimal2)
End
Sub
Enrique Martínez Montejo - 2004
NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.
NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.