You are on page 1of 3

Ejercicio de escritura / lectura de datos simples en un fichero

Realizar un programa que le permita a un usuario introducir nmeros enteros distintos del
0, guardarlos en un fichero y poder leerlos.
El programa mostrar un men inicial con las siguientes opciones:
0.- Fin del programa
1.- Solicitar datos y almacenar en un fichero
2.- Leer datos del fichero

Opcin 0, finalizar el programa y mostrar el siguiente mensaje:


"FIN DEL PROGRAMA: Fichero con datos simples"

Opcin 1, mostrar el siguiente submen:


0.- Volver al men principal
1.- Aadir datos al fichero existente
2.- Sobrescribir los datos existentes

Opcin 0, vuelve al men principal

NOTA.- LAS DOS OPCIONES -1 y 2- VAN EN EL MISMO CASE, YA QUE LA DIFERENCIA SLO
EST EN EL MODO DE ABRIR EL FICHERO PARA ESCRITURA

Opcin 1 to 2:
o
Opcin 1.- abre el fichero que se define en el programa en la vble ruta_vector y aade al
final del mismo los datos.
o
Opcin 2.- abre el fichero que se define en el programa en la vble ruta_vectror y
sobrescribe los datos que existen (en concreto borra lo que tiene y escribe lo nuevo).
A continuacin se llama a un procedimiento pedir_escribir_datos_simples que se le pasa
idfichero_numero y lo que hace es pedir nmeros al usuario distintos de cero e ir guardndolos
en el fichero. El usuario finaliza de introducir datos cuando escribe como valor el 0.

Opcin 2, comprobar primero si existe el fichero del cual leer, que es el que est
indicado en la vble ruta_numero y de no existir muestra el siguiente mensaje
de error:
Error: No existe fichero de datos.
En el caso de existir dicho fichero, mostrar el siguiente submen:
0.- Volver al men principal
1.- Mostrar los valores del fichero almacenados en un string
2.- Mostrar los valores del fichero almacenados en un vector

Opcin 0, vuelve al men principal


Opcin 1, abre el fichero para lectura que se define en el programa en la vble ruta_numero. Leemos
los datos del fichero en una vble simple y con cada lectura lo almacenamos en una cadena. Al finalizar
la lectura comprobamos si la cadena creada est vaca por si el fichero no tena datos y mostramos el
siguiente mensaje: El fichero no tiene datos para leer. En caso de tener datos, los mostramos
mediante el siguiente mensaje: Los nmeros ledos del fichero son: ..
Opcin 2, abre el fichero para lectura que se define en el programa en la vble ruta_numero. Leemos
los datos del fichero en una vble tipo vector. Al finalizar la lectura comprobamos si la vble ndice es
cero por si el fichero no tena datos y mostramos el siguiente mensaje: El fichero no tiene datos para
leer. En caso de tener datos, los mostramos mediante el siguiente mensaje: Los nmeros ledos del
fichero son: .. llamando a la funcin devolver_vector_string que se le pasa el vector de datos y
nos devuelve dichos datos en un string.

Modulefichero_dato_simple
Submain()

DimnumeroAsInteger'Vblequealmacenaelvalorsolicitadoalusuario
DimmenuAsByte'Almacenalaopcindelmengeneral
DimsubmenuAsByte'Almacenalaopcindelsubmenu

Dimcad_numeroAsString=""'Cadenaqueguardalosvaloresleidosdelfichero
Dimvector_numeros()AsInteger'Vblequeguardalosvaloresledosdelficheroenunvectorsintamaoyaquese
desconocectosvaloreshay

Dimopciones_validasAsString=""'paraloscaseelsedelosmenus,verSubMsg_error(byvalop_okasstring)
DimindiceAsByte=0'Vblequerecorrelasposicionesdeloselementosdeunvector

Dimidfichero_numeroAsInteger'Vblequeguardaelintegerqueidentificarelarchivoautilizar
'Rutadelarchivoconsunombre(pordefectoenlacarpetadelproyecto/Bin/Debug)
Dimruta_numeroAsString="Numero.txt"

idfichero_numero=FreeFile()

'Trabajarenficheroscondatossimples
Do
menu=InputBox("Elijaunaopcin:"&vbCrLf&
"0.Findelprograma"&vbCrLf&
"1.Solicitardatosyalmacenarenunfichero"&vbCrLf&
"2.Leerdatosdelfichero","Ficheroscondatossimples")
SelectCasemenu
Case0
MsgBox("FINDELPROGRAMA:Ficherocondatossimples",MsgBoxStyle.Information,"Ficheroscondatos
simples")
Case1'Pedirdatosyalmacenarlosenunfichero
Do
submenu=InputBox("Elijaunaopcin:"&vbCrLf&
"0.Volveralmenprincipal"&vbCrLf&
"1.Aadirdatosalficheroexistente"&vbCrLf&
"2.Sobrescribirlosdatosexistentes","Escribirenelfichero")
'Comprobamossiexisteelficheroparalectura
SelectCasesubmenu
Case0'Volveralmenanterior
'MsgBox("Opcincancelada",MsgBoxStyle.Information,"Escribirdatosenelfichero")
Case1To2'Abrimoselficheroparaaadirdatos
'Comprobamosqueopcinhaescogidoelusuarioparaescribirenelficherolosdatos
Ifsubmenu=1Then
'Abrimoselficheroparaaadirdatosalfinal
FileOpen(idfichero_numero,ruta_numero,OpenMode.Append)
Else
'Abrimoselficheroyescribeenlaprimeraposicin,sobrescribiendolosdatosque
existan
FileOpen(idfichero_numero,ruta_numero,OpenMode.Output)
EndIf

'Pedimoslosdatosylosguardamosenelfichero
pedir_escribir_datos_simples(idfichero_numero)
FileClose()'Cerramoselfichero
CaseElse'Cualquieropcinnovlidadelsubmenu
opciones_validas="0,1y2"
msg_error(opciones_validas)
EndSelect
LoopUntilsubmenu=0
Case2'Abrirelficheroyleerlosdatos
'Comprobamossiexisteelficheroparalectura
My.computer.filesystem.fileExistdevuelve"TRUE"siexisteelficheroconelnombrequeselepasa
IfMy.Computer.FileSystem.FileExists(ruta_numero)=FalseThen
MsgBox("Error:Noexisteficherodedatos.",MsgBoxStyle.Exclamation,"Leerfichero")
Else'Elficheroexisteyloabrimosparalectura
Do
'Mostrarmoselsubmenu
submenu=InputBox("Elijaunaopcin:"&vbCrLf&
"0.Volveralmenprincipal"&vbCrLf&
"1.Mostrarlosvaloresdelficheroalmacenadosenunstring"&vbCrLf&
"2.Mostrarvaloresdelficheroalmacenadosenunvector","Leerdatos
enfichero")
SelectCasesubmenu
Case0'Volveralmenanterior
'MsgBox("Opcincancelada",MsgBoxStyle.Information,"Leerdatosdelfichero")
Case1'Leerdatosyalmacenarlosenunstring
'Abrimoselficheroparalectura
FileOpen(idfichero_numero,ruta_numero,OpenMode.Input)
'Inicializamoslavblea""
cad_numero=""
'Recorremoselficherodesdeelprincipiohastaelfinaldelfichero(EOF)
DoWhileNotEOF(idfichero_numero)
'Guardamosenlavblenumeroeldatoledo
Input(idfichero_numero,numero)
'Comodichavblesloguardaunnmero,lovamosalmacenandoenlacadena
cad_numero=cad_numero&numero&vbTab
Loop
'Comprobamosqueelficherotuviesedatos

Ifcad_numero=""Then
MsgBox("Elficheronotienedatosparaleer",MsgBoxStyle.Information,"Leer
datosenfichero")
Else'Sehanledodatosdelfichero
MsgBox("Losnmerosledosdelficheroson:"&vbCrLf&
cad_numero,MsgBoxStyle.DefaultButton1,"Leerdatosenfichero")
EndIf
FileClose()'Cerramoselfichero
Case2'Leerdatosyalmacenarlosenunvector
'Abrimoselficheroparalectura
FileOpen(idfichero_numero,ruta_numero,OpenMode.Input)
'Inicializamoselindicedelvector
indice=0
'Recorremoselficherodesdeelprincipiohastaelfinaldelfichero(EOF)
DoWhileNotEOF(idfichero_numero)
'Creamoselvectorconeltamaodelosdatosquesevanleyendo
'manteniendolosqueyaexistenparanosobreescribirlos
ReDimPreservevector_numeros(indice)
'Guardamosencadaposicindelvectorlosnmerosledos
Input(idfichero_numero,vector_numeros(indice))
indice+=1'vamosincrementandoelindicedelosdatosaleer
Loop
'Comprobamosqueelficherotuviesedatos
Ifindice=0Then
MsgBox("Elficheronotienedatosparaleer",MsgBoxStyle.Information,"Leer
fichero")
Else'Sehanledodatosdelfichero
MsgBox("Losnmerosledosdelficheroson:"&vbCrLf&
devolver_vector_string(vector_numeros),MsgBoxStyle.DefaultButton1,"Leerfichero")
EndIf
FileClose()'Cerramoselfichero
CaseElse'Cualquieropcinnovlidadelsubmenu
opciones_validas="0,1y2"
msg_error(opciones_validas)
EndSelect
LoopUntilsubmenu=0
EndIf
CaseElse'Cualquieropcinnovlidadelmenu
opciones_validas="0,1o2"
msg_error(opciones_validas)
EndSelect
LoopUntilmenu=0
EndSub

Submsg_error(ByValop_okAsString)'Nodevuelvenada,slomuestraunmensaje
'Muestarunmensajedeerrorparaelcaseelse
'pasandolelasopcionescorrectasaseleccionarporelusuario

MsgBox("ERROR:Opcionincorrecta.Opcionesvlidas:"&op_ok,MsgBoxStyle.Critical,"ERRORopcion")
EndSub

Subpedir_escribir_datos_simples(ByValidfichero1AsInteger)
DimnumeroAsInteger
'Pedimosnmeroshastaqueintroduceun"cero"parafinalizardepedirdatos
Do
numero=InputBox("Introduzcaunvalorentero."&vbCrLf&"(Valor0parafinalizar)")
Ifnumero<>0Then
'Guardamoselnmerointroducidoenelfichero
Write(idfichero1,numero)
EndIf
LoopWhilenumero<>0'Finalizalapeticindenmeros
EndSub

Functiondevolver_vector_string(ByRefvector_numeros()AsInteger)AsString
'Devuelveenunstringlosvaloresdelvector
'Creamoslavbletipostringquealmacenarlosvaloresdelvector
DimcadenaAsString=""
Forindice=0ToUBound(vector_numeros)
'Vamosacumulandoenlacadenalosnmeroseparadosporunespacio
cadena=cadena&vector_numeros(indice)&""
Next
`Devolvemoslacadenaconlosnmerosdelvector
Returncadena
EndFunction
EndModule

You might also like