Ejercicio Fichero Dato Simple

download Ejercicio Fichero Dato Simple

of 3

description

informatica

Transcript of Ejercicio Fichero Dato Simple

  • 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_simpleSubmain()DimnumeroAsInteger'VblequealmacenaelvalorsolicitadoalusuarioDimmenuAsByte'AlmacenalaopcindelmengeneralDimsubmenuAsByte'AlmacenalaopcindelsubmenuDimcad_numeroAsString=""'CadenaqueguardalosvaloresleidosdelficheroDimvector_numeros()AsInteger'VblequeguardalosvaloresledosdelficheroenunvectorsintamaoyaquesedesconocectosvaloreshayDimopciones_validasAsString=""'paraloscaseelsedelosmenus,verSubMsg_error(byvalop_okasstring)DimindiceAsByte=0'VblequerecorrelasposicionesdeloselementosdeunvectorDimidfichero_numeroAsInteger'Vblequeguardaelintegerqueidentificarelarchivoautilizar'Rutadelarchivoconsunombre(pordefectoenlacarpetadelproyecto/Bin/Debug)Dimruta_numeroAsString="Numero.txt"idfichero_numero=FreeFile()'TrabajarenficheroscondatossimplesDomenu=InputBox("Elijaunaopcin:"&vbCrLf&"0.Findelprograma"&vbCrLf&"1.Solicitardatosyalmacenarenunfichero"&vbCrLf&"2.Leerdatosdelfichero","Ficheroscondatossimples")SelectCasemenuCase0MsgBox("FINDELPROGRAMA:Ficherocondatossimples",MsgBoxStyle.Information,"Ficheroscondatossimples")Case1'PedirdatosyalmacenarlosenunficheroDosubmenu=InputBox("Elijaunaopcin:"&vbCrLf&"0.Volveralmenprincipal"&vbCrLf&"1.Aadirdatosalficheroexistente"&vbCrLf&"2.Sobrescribirlosdatosexistentes","Escribirenelfichero")'ComprobamossiexisteelficheroparalecturaSelectCasesubmenuCase0'Volveralmenanterior'MsgBox("Opcincancelada",MsgBoxStyle.Information,"Escribirdatosenelfichero")Case1To2'Abrimoselficheroparaaadirdatos'ComprobamosqueopcinhaescogidoelusuarioparaescribirenelficherolosdatosIfsubmenu=1Then'AbrimoselficheroparaaadirdatosalfinalFileOpen(idfichero_numero,ruta_numero,OpenMode.Append)Else'Abrimoselficheroyescribeenlaprimeraposicin,sobrescribiendolosdatosqueexistanFileOpen(idfichero_numero,ruta_numero,OpenMode.Output)EndIf'Pedimoslosdatosylosguardamosenelficheropedir_escribir_datos_simples(idfichero_numero)FileClose()'CerramoselficheroCaseElse'Cualquieropcinnovlidadelsubmenuopciones_validas="0,1y2"msg_error(opciones_validas)EndSelectLoopUntilsubmenu=0Case2'Abrirelficheroyleerlosdatos'ComprobamossiexisteelficheroparalecturaMy.computer.filesystem.fileExistdevuelve"TRUE"siexisteelficheroconelnombrequeselepasaIfMy.Computer.FileSystem.FileExists(ruta_numero)=FalseThenMsgBox("Error:Noexisteficherodedatos.",MsgBoxStyle.Exclamation,"Leerfichero")Else'ElficheroexisteyloabrimosparalecturaDo'Mostrarmoselsubmenusubmenu=InputBox("Elijaunaopcin:"&vbCrLf&"0.Volveralmenprincipal"&vbCrLf&"1.Mostrarlosvaloresdelficheroalmacenadosenunstring"&vbCrLf&"2.Mostrarvaloresdelficheroalmacenadosenunvector","Leerdatosenfichero")SelectCasesubmenuCase0'Volveralmenanterior'MsgBox("Opcincancelada",MsgBoxStyle.Information,"Leerdatosdelfichero")Case1'Leerdatosyalmacenarlosenunstring'AbrimoselficheroparalecturaFileOpen(idfichero_numero,ruta_numero,OpenMode.Input)'Inicializamoslavblea""cad_numero=""'Recorremoselficherodesdeelprincipiohastaelfinaldelfichero(EOF)DoWhileNotEOF(idfichero_numero)'GuardamosenlavblenumeroeldatoledoInput(idfichero_numero,numero)'Comodichavblesloguardaunnmero,lovamosalmacenandoenlacadenacad_numero=cad_numero&numero&vbTabLoop'Comprobamosqueelficherotuviesedatos

  • Ifcad_numero=""ThenMsgBox("Elficheronotienedatosparaleer",MsgBoxStyle.Information,"Leerdatosenfichero")Else'SehanledodatosdelficheroMsgBox("Losnmerosledosdelficheroson:"&vbCrLf&cad_numero,MsgBoxStyle.DefaultButton1,"Leerdatosenfichero")EndIfFileClose()'CerramoselficheroCase2'Leerdatosyalmacenarlosenunvector'AbrimoselficheroparalecturaFileOpen(idfichero_numero,ruta_numero,OpenMode.Input)'Inicializamoselindicedelvectorindice=0'Recorremoselficherodesdeelprincipiohastaelfinaldelfichero(EOF)DoWhileNotEOF(idfichero_numero)'Creamoselvectorconeltamaodelosdatosquesevanleyendo'manteniendolosqueyaexistenparanosobreescribirlosReDimPreservevector_numeros(indice)'GuardamosencadaposicindelvectorlosnmerosledosInput(idfichero_numero,vector_numeros(indice))indice+=1'vamosincrementandoelindicedelosdatosaleerLoop'ComprobamosqueelficherotuviesedatosIfindice=0ThenMsgBox("Elficheronotienedatosparaleer",MsgBoxStyle.Information,"Leerfichero")Else'SehanledodatosdelficheroMsgBox("Losnmerosledosdelficheroson:"&vbCrLf&devolver_vector_string(vector_numeros),MsgBoxStyle.DefaultButton1,"Leerfichero")EndIfFileClose()'CerramoselficheroCaseElse'Cualquieropcinnovlidadelsubmenuopciones_validas="0,1y2"msg_error(opciones_validas)EndSelectLoopUntilsubmenu=0EndIfCaseElse'Cualquieropcinnovlidadelmenuopciones_validas="0,1o2"msg_error(opciones_validas)EndSelectLoopUntilmenu=0EndSubSubmsg_error(ByValop_okAsString)'Nodevuelvenada,slomuestraunmensaje'Muestarunmensajedeerrorparaelcaseelse'pasandolelasopcionescorrectasaseleccionarporelusuarioMsgBox("ERROR:Opcionincorrecta.Opcionesvlidas:"&op_ok,MsgBoxStyle.Critical,"ERRORopcion")EndSubSubpedir_escribir_datos_simples(ByValidfichero1AsInteger)DimnumeroAsInteger'Pedimosnmeroshastaqueintroduceun"cero"parafinalizardepedirdatosDonumero=InputBox("Introduzcaunvalorentero."&vbCrLf&"(Valor0parafinalizar)")Ifnumero0Then'GuardamoselnmerointroducidoenelficheroWrite(idfichero1,numero)EndIfLoopWhilenumero0'FinalizalapeticindenmerosEndSubFunctiondevolver_vector_string(ByRefvector_numeros()AsInteger)AsString'Devuelveenunstringlosvaloresdelvector'CreamoslavbletipostringquealmacenarlosvaloresdelvectorDimcadenaAsString=""Forindice=0ToUBound(vector_numeros)'Vamosacumulandoenlacadenalosnmeroseparadosporunespaciocadena=cadena&vector_numeros(indice)&""Next`DevolvemoslacadenaconlosnmerosdelvectorReturncadenaEndFunctionEndModule