Manejo de Archivos Secuenciales

24
INSTITUTO TECNOLOGICO SUPERIOR DE LERDO Nombre: Sergio Ivan Hernandez Tijerina No Control: 10231137 Materia: Administración y organización de datos Actividad: Resumen sobre manejo de archivos secuenciales

description

Resumen con ejemplos de código para el manejo de archivos secuenciales en diversos lenguajes de programación

Transcript of Manejo de Archivos Secuenciales

Page 1: Manejo de Archivos Secuenciales

INSTITUTO TECNOLOGICO SUPERIOR DE LERDO

Nombre: Sergio Ivan Hernandez Tijerina

No Control: 10231137

Materia: Administración y organización de datos

Actividad: Resumen sobre manejo de archivos secuenciales

Page 2: Manejo de Archivos Secuenciales

Manejo de Archivos Secuenciales

Realizar una investigación sobre el manejo de archivos secuenciales en los siguientes lenguajes de programación:

• C#• PHP• JAVA• XML

Delphi XE – XE2• FLEX

Acontinuacion se muestran los ejemplos encontrados sobre: Creación, lectura, busqueda, eliminacion de archivos secuenciales en los lenguajes anteriormente mencionados

C#

Creación

OpenFileDialog dlgopen = new OpenFileDialog();dlgopen.CheckFileExists = false;if ((dlgopen.ShowDialog() == Windows.Forms.DialogResult.OK)) {

// creamos flujoFileStream flujoopen= new FileStream(dlgopen.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);BinaryReader leerfile = new BinaryReader(flujoopen);archivo = dlgopen.FileName;

// leemosif ((leerfile.PeekChar != -1)) {

// si si existe texto// obtenemos total de registros

registro = ((int)(Math.Ceiling((flujoopen.Length/70))));int a;for (a = 0; (a <= (registro - 1)); a++){leerfile.BaseStream.Seek((70 * a),SeekOrigin.Begin);//70 bytes de largo por cada registrovdatos[a].numtra = leerfile.ReadInt32.ToString;vdatos[a].nombre = leerfile.ReadString.ToString;vdatos[a].dep = leerfile.ReadString.ToString;

vdatos(a).salario = leerfile.ReadSingle.ToString;}mnunuevo.Enabled = true;

verregistro(0);// habilitamos menus de navegacion respecto a la posicion actual

if((registro > 1)) {// si hay mas de un registroif ((registronow == (registro - 1))) {

// si esta en la ultima posicionmnuanterior.Enabled = true;mnuprimero.Enabled = true;

}else if ((registronow == 0)) {

// si esta en la primer posicionmnuultimo.Enabled = true;mnusiguiente.Enabled = true;

}else {

// si cae aki esporke es un registro de en mediomnuanterior.Enabled = true;mnuprimero.Enabled = true;mnuultimo.Enabled = true;mnusiguiente.Enabled = true;}

Page 3: Manejo de Archivos Secuenciales

}}else {

mnunuevo.Enabled = true;sblabel.Text = "Sin registros";txtnumtra.Text = "";txtnombre.Text = "";txtdep.Text = "";txtsalario.Text = "";registro = 0;

// inicializamos los registros}GuardarToolStripMenuItem.Enabled = true;leerfile.Close();flujoopen.Close();// ponemos nombre de archivolblfile.Text = Path.GetFileName(dlgopen.FileName);txtnumtra.Focus();

}

Lectura

using System;using System.Text;using System.IO;namespace Test_TextFiles{ class Program { static void Main(string[] args)

{try{

TextReader trs = new StreamReader(@"C:\test.txt");//Lectura de todo el texto del archivo//Console.WriteLine(trs.ReadToEnd());

//o lectura secuencialwhile (trs.Peek()>=0){

Console.WriteLine(trs.ReadLine());}

trs.Close();}catch(Exception e){

Console.WriteLine(e.Message);}Console.WriteLine("Presione cualquier tecla para continuar...");Console.ReadKey();

} }}

Page 4: Manejo de Archivos Secuenciales

PHPCreación

<HTML>

<FORM ACTION=prog19.php METHOD=post>

CLAVE:<INPUT TYPE=text NAME=CLAVE><BR>

NOMBRE:<INPUT TYPE=text NAME=NOMBRE><BR>

EDAD:<INPUT TYPE=text NAME=EDAD><BR>

ESTATURA:<INPUT TYPE=text NAME=ESTATURA><BR>

<INPUT TYPE=submit NAME=OK VALUE="insertar"><BR>

</FORM></HTML>

<?php

if ($OK == "insertar") {

// creando y abriendo archivo

$archivo=fopen('alumnos.dat','a+') or die("no puedo abrir archivo");

// grabando los campos

fputs($archivo, $CLAVE."\n");

fputs($archivo, $NOMBRE."\n");

fputs($archivo, $EDAD."\n");

fputs($archivo, $ESTATURA."\n");

//cerrando archivo

fclose($archivo);

//avisando

Page 5: Manejo de Archivos Secuenciales

echo "registro #".$CLAVE." insertado"."<br>";

};

?>

Lectura<HTML>

<FORM ACTION=prog20.php METHOD=post>

<INPUT TYPE=submit NAME=OK VALUE="lectura"><BR>

</FORM></HTML>

<?php

if ($OK == "lectura") {

// abriendo archivo

$archivo=fopen('alumnos.dat','a+');

// empezando una tabla html para desplegar

echo "<HTML><TABLE Border=10 CellPadding=5><TR>";

echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>";

// leyendo el archivo

while (!feof($archivo)){

$clave=fgets($archivo);

$nombre=fgets($archivo);

$edad=fgets($archivo);

Page 6: Manejo de Archivos Secuenciales

$estatura=fgets($archivo);

// desplegando en celda de tabla html

echo"<tr>";

echo "<td>".$clave."</td>";

echo "<td>".$nombre."</td>";

echo "<td>".$edad."</td>";

echo "<td>".$estatura."</td>";

echo"</tr>";

};

// cerrando archivo y la tabla html

echo "</table>";

fclose($archivo);

};

?>

Page 7: Manejo de Archivos Secuenciales

Busqueda

<HTML>

<FORM ACTION=prog21.php METHOD=post>

DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR>

<INPUT TYPE=submit NAME=OK VALUE="busqueda"><BR>

</FORM></HTML>

<?php

if ($OK == "busqueda") {

// abriendo archivo

$archivo=fopen('alumnos.dat','a+');

// empezando una tabla html para desplegar

echo "<HTML><TABLE Border=10 CellPadding=5><TR>";

echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>";

// leyendo el archivo

while (!feof($archivo)){

$clave=fgets($archivo);

$nombre=fgets($archivo);

$edad=fgets($archivo);

$estatura=fgets($archivo);

// convirtiendo al mismo tipo

Page 8: Manejo de Archivos Secuenciales

settype($clave,"integer");

// settype($CLAVE,"integer");

if ( $CLAVE == $clave){

// desplegando en celda de tabla html

echo"<tr>";

echo "<td>".$clave."</td>";

echo "<td>".$nombre."</td>";

echo "<td>".$edad."</td>";

echo "<td>".$estatura."</td>";

echo"</tr>";};

};

// cerrando archivo y la tabla html

echo "</table>";

fclose($archivo);

};

?>

Eliminacion

<HTML>

<FORM ACTION=prog23.php METHOD=post>

DAME CLAVE A ELIMINAR:<INPUT TYPE=text NAME=CLAVE><BR>

Page 9: Manejo de Archivos Secuenciales

<INPUT TYPE=submit NAME=OK VALUE="baja"><BR>

</FORM></HTML>

<?php

if ($OK == "baja") {

// abriendo dos archivos

$archivo=fopen('alumnos.dat','a+');

$archt=fopen('temporal.dat','a+') or dye ("no puedo crear archivo") ;

// leyendo el archivo original

while (!feof($archivo))

{

$clave=fgets($archivo);

$nombre=fgets($archivo);

$edad=fgets($archivo);

$estatura=fgets($archivo);

// convirtiendo al mismo tipo

settype($clave,"integer");

if( $CLAVE != $clave and $clave != 0 )

{

// cargando al archivo temporal

fputs($archt, $clave."\n");

Page 10: Manejo de Archivos Secuenciales

// ojo aqui ya es string

fputs($archt, $nombre);

fputs($archt, $edad);

fputs($archt, $estatura);

};

};

// cerrando los dos archivos

fclose($archivo);

fclose($archt);

// eliminando archivo original

unlink("alumnos.dat");

// renombrando temporal como original

rename("temporal.dat","alumnos.dat");

// avisando

echo "registro eliminado";

};

?>

Page 11: Manejo de Archivos Secuenciales

JAVA

Creaciónimport java.io.*; import javax.servlet.*;

import javax.servlet.http.*;

public class prog34 extends HttpServlet

{ public void doPost (HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{

// se debe crear un objeto de tipo archivo

DataOutputStream archivo = null;

//historia triste se deben grabar y leer solo campo a campo

// creando e inicializando los campos

int matricula=0;

String nombre=new String("");

int edad=0;

Integer temp1=new Integer(0);

try{

//* Creando y grabando a un archivo, esta larga la instrucción*/

archivo = new DataOutputStream( new FileOutputStream("c:\\xitami\\servlets\\susitio\\archivo1.dat",true) );

Page 12: Manejo de Archivos Secuenciales

//capturando y convirtiendo los datos de la pagina

temp1 = temp1.valueOf( request.getParameter("MATRICULA"));

matricula= temp1.intValue();

nombre=request.getParameter("NOMBRE");

temp1 =temp1.valueOf(request.getParameter("EDAD"));

edad= temp1.intValue();

//grabando al archivo

archivo.writeInt(matricula);

archivo.writeUTF(nombre);

archivo.writeInt(edad);

archivo.close();

//pagina de aviso

PrintWriter pagina;

response.setContentType("text/html");

pagina = response.getWriter();

pagina.println("<HTML>");

pagina.println("REGISTRO? INSERTADO USAR BACK PARA REGRESAR E INSERTAR OTRO");

pagina.println("</HTML>");

pagina.close();

}

Page 13: Manejo de Archivos Secuenciales

catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

destroy();

};

public void destroy(){super.destroy();};

}

Lecturaimport java.io.*; import javax.servlet.*;

import javax.servlet.http.*;

public class prog35 extends HttpServlet

{public void doPost (HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{ DataInputStream archivo = null;

int matricula=0;

String nombre=new String("");

int edad=0;

PrintWriter pagina;

response.setContentType("text/html");

pagina = response.getWriter();

Page 14: Manejo de Archivos Secuenciales

pagina.println("<HTML>");

pagina.println("<P ALIGN="+"CENTER"+">ALUMNOS TABLA</P>");

pagina.println("<P ALIGN="+"CENTER"+">MATRICULA NOMBRE EDAD</P>");

pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");

pagina.println("<TABLE BORDER="+"1"+">");

try{

//* abriendo archivo para lectura */

archivo = new DataInputStream( new FileInputStream("c:\\xitami\\servlets\\lauro\\archivo1.dat") );

//leyendo archivo

while (true) {

pagina.println("<TR>");

matricula=archivo.readInt();pagina.println("<TD>"+matricula+"</TD>");

nombre=archivo.readUTF();pagina.println("<TD>"+nombre+"</TD>");

edad=archivo.readInt();pagina.println("<TD>"+edad+"</TD>");

pagina.println("</TR>");}

}

catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

pagina.println("</TABLE></CENTER></DIV></HTML>");

archivo.close();

Page 15: Manejo de Archivos Secuenciales

pagina.close();

destroy();

};

public void destroy(){super.destroy();};

}

Busquedaimport java.io.*; import javax.servlet.*;

import javax.servlet.http.*;

public class prog36 extends HttpServlet

{ public void doPost (HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{ DataInputStream archivo = null;

int matricula=0;

String nombre=new String("");

int edad=0;

Integer temp1=new Integer(0);

PrintWriter pagina;

response.setContentType("text/html");

pagina = response.getWriter();

pagina.println("<HTML>");

Page 16: Manejo de Archivos Secuenciales

pagina.println("<P ALIGN="+"CENTER"+">ALUMNOS TABLA</P>");

pagina.println("<P ALIGN="+"CENTER"+">MATRICULA NOMBRE EDAD</P>");

pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");

pagina.println("<TABLE BORDER="+"1"+">");

//capturando clave a buscar

temp1 = temp1.valueOf( request.getParameter("MATRICULA"));

int clave = temp1.intValue();

try{

//* abriendo archivo para lectura */

archivo = new DataInputStream( new FileInputStream("c:\\xitami\\servlets\\lauro\\archivo1.dat") );

//leyendo archivo y observar donde quedo TR

pagina.println("<TR>");

while (true) {

//leyendo registro

matricula=archivo.readInt();

nombre=archivo.readUTF();

edad=archivo.readInt();

//comparando y desplegar en condición cierta

if (clave == matricula){

pagina.println("<TD>"+matricula+"</TD>");

Page 17: Manejo de Archivos Secuenciales

pagina.println("<TD>"+nombre+"</TD>");

pagina.println("<TD>"+edad+"</TD>");

pagina.println("</TR>");}; } }

catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }

catch (IOException ioe) { /* Error al escribir */ }

pagina.println("</TABLE></CENTER></DIV></HTML>");

archivo.close();

pagina.close();

destroy();

};

public void destroy(){super.destroy();};

}

Delphi

Procedure CrearFichero;

Var

Datos : File of TListado;

begin

AssignFile (Datos, ‘Informacion.fic’);

Rewrite (Datos);

CloseFile (Datos);

end;

Procedure EscribirDatos (NuevaInformacion : TListado);

Page 18: Manejo de Archivos Secuenciales

Var

Datos : File of TListado;

begin

AssignFile (Datos, ‘Informacion. fic’);

Reset (Datos);

Seek (Datos,FileSize (Datos));

Write (Datos, NuevaInformacion);

CloseFile (Datos);

end;

Procedure LeerDatos;

Var

Datos : File of TListado;

I : Integer;

begin

AssignFile (Datos, ‘Informacion. fic’);

Reset (Datos);

For I := 1 to FileSize (Datos) do

Read (Datos, Listado [I]);

CloseFile (Datos);

end;

XML y FLEX

<?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="450" width="552" showTitleBar="false">

<mx:Button x="396.5" y="85" label="Cargar Archivo" id="btload" click="onload()" width="110.5"/>

Page 19: Manejo de Archivos Secuenciales

<mx:Button x="401" y="39" label="Crear Archivo" id="btncreate" click="createfile()" width="106"/>

<mx:TextArea x="27.5" y="86" width="361" height="341" id="textarea"/>

<mx:TextInput x="195" y="39" id="texnomb"/>

<mx:Label x="27.5" y="41" text="Nombre del archivo a crear" id="lbtext"/>

<mx:Script>

<![CDATA[

/* para el tratamiento de archivos.

clases:

File, FileMode y FileStream

*/

import flash.filesystem.*;

//import flash.net.FileFilter;

//import flash.events.Event;

public function onload():void{

//declaramos una variable de tipo archivo y la instanciamos

var fileToOpen:File= new File();

/*creamos dos variables txtFilter y allfiles de tipo FileFilter

para asignar un filtro de archivos para nuestra aplicacion, es decir

solo mostrara el tipo de archivos que deseamos

*/

var txtFilter:FileFilter = new FileFilter("Archivos de Texto (*.as,*.xhtml,*.xml,*.mxml,*.txt)","*.as;*.xhtml;*.xml;*.mxml;*.txt");

var allfiles:FileFilter = new FileFilter("Todos los archivos...","*.*");

try

{

/*intentamos abrir archivos usando un cuadro de dialogo abrir y le pasamos

las variables filtro txtFilter y allfiles.

*/

fileToOpen.browseForOpen("Abrir Archivo", [txtFilter,allfiles]);

//en caso de seleccionar un archivo llamará al metodo fileSelected

fileToOpen.addEventListener(Event.SELECT, fileSelected);

Page 20: Manejo de Archivos Secuenciales

}

catch (error:Error)

{

//en caso de error limpiamos el textarea

textarea.text="";

/*y mostramos un mensaje de error de error.message el cual nos

indica el tipo de error producido. (vease Runtime Errors en la documentacion)

*/

textarea.text="\nFallo al cargar el archivo: "+String(error.message);

}

function fileSelected(event:Event):void {

/*funcion fileSelected para tratar si un archivo fue seleccionado en el

cuadro de dialogo abrir.

Creamos una variable llamada stream de tipo FileStream el cual se utilizara

para la creacion, carga, lectura y escritura del archivo

*/

var stream:FileStream = new FileStream();

//abrirmos el archivo fijado por fileToOpen para lectura

stream.open(fileToOpen, FileMode.READ);

/*declaramos una variable fileData de tipo String para almacenar los

datos recopilados del archivo despues de su apertura.

Puede utilizarse de la forma:

var fileData:String = stream.readUTF();

El metodo stream.readUTF lee una cadena desde el archivo y la trata como

de tipo UTF-8.

o de la forma:

Page 21: Manejo de Archivos Secuenciales

var fileData:String = stream.readUTFBytes(stream.bytesAvailable);

El metodo stream.readUTFBytes lee una secuencia de bytes desde el archivo

y los trata como UTF-8.

Se le pasa como parametro la cantidad de bytes a leer, en este caso la

propiedad bytesAvailable el cual retorna el numero de bytes disponibles para

leer desde el archivo.

*/

var fileData:String = stream.readUTFBytes(stream.bytesAvailable);

//pasamos el contenido de la variable fileData al textarea.

textarea.text=fileData;

}//fileSelected

}//onload

public function createfile():void{

try

{

/*intentamos crear un archivo xml y guardarlo en el escritorio del

usuario en curso.

La funcion createfile utilzada para crear un nuevo archivo xml, con datos

establecidos en una variable myXML de tipo XML-

Declaramos un variable source de tipo file, esta representa la ruta a un

archivo o directorio.

La propiedad desktopDirectory como su nombre lo indica, especifica la ruta

del escritorio del usuario.

Page 22: Manejo de Archivos Secuenciales

El metodo resolvePath crea un nuevo objeto tipo File con una ruta relativa

para el archivo, basado en un parametro que contiene el nombre y/o ruta del

archivo en cuestion.

Tomamos lo descrito en un Textinput para darle un nombre al archivo.

por defecto fijamos la extension xml.

*/

var source:File = File.desktopDirectory.resolvePath(texnomb.text+".xml");

//limpiamos el textarea para cargar el archivo.

textarea.text="";

/*mostramos donde fue guardado el archivo, la propiedad nativePath indica

la ruta, nombre y extension del archivo guardado.

*/

textarea.text+="\n Archivo creado en: \n"+String(source.nativePath)+"\n";

/*creamos una variable llamada flujo de tipo FileStream el cual se

utilizara para la creacion, carga, lectura y escritura del archivo

*/

var flujo:FileStream = new FileStream();

//abrirmos el archivo fijado por source para escritura

flujo.open(source, FileMode.WRITE);

//creamos una variable myXML de tipo XML a la cual le ingresamos algunos datos.

var myXML:XML =

<order>

<item id="uno">

<menuName>burger</menuName>

<price>3.95</price>

<cant>20</cant>

</item>

Page 23: Manejo de Archivos Secuenciales

<item id="2">

<menuName>fries</menuName>

<price>1.45</price>

<cant>60</cant>

</item>

<item id="3">

<menuName>carne</menuName>

<price>3444.5</price>

</item>

<item id="4">

<menuName>fin</menuName>

<price>0</price>

</item>

</order>;

/*creamos una variable cab, de tipo String para cargar la cabecera

del XML, esto se hace para tener conformidad con el standar y que a la

variable XML no se le puede anexar.

*/

var cab:String="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"

/*opcionalmente podemos convertir la variable myXML a String

y asignarsela a una variable de tipo String para pasarla como parametro

al metodo writeUTFBytes, utilizado para guardar los datos al archivo.

ej:

var cadxml:String= myXML.toString();

flujo.writeUTFBytes(cab);//guardamos la cabecera del xml

flujo.writeUTFBytes(cadxml);//guardamos el xml

Page 24: Manejo de Archivos Secuenciales

*/

//escribimos los datos en el archivo

flujo.writeUTFBytes(cab);//guardamos la cabecera del xml

flujo.writeUTFBytes(myXML);//guardamos el xml

//cerramos el archivo

flujo.close();

}

catch (error:Error)

{

//en caso de error limpiamos el textarea

textarea.text="";

/*y mostramos un mensaje de error de error.message el cual nos

indica el tipo de error producido. (vease Runtime Errors en la documentacion)

*/

textarea.text+="\nFallo al cargar el archivo: "+String(error.message);

}

}//createfile

]]>

</mx:Script>

</mx:WindowedApplication>