Professional Documents
Culture Documents
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
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
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