Documente Academic
Documente Profesional
Documente Cultură
Se puede cambiar este fichero a una lectura con buffer, que tericamente es ms eficiente, pero no porque sea ms rpida, sino porque es ms buena persona con el resto de los recursos del sistema: hace menos llamadas al sistema operativo, porque la lectura la hace a travs de lecturas de bloques de bytes:
using System; using System.IO; public class file1a { public static void Main ( string[] args ) { FileStream s2 = new FileStream(args[0], FileMode.Open, FileAccess.Read, FileShare.Read); BufferedStream bs = new BufferedStream( s2 ); while ( bs.Length > bs.Position ) { Console.Write( (char) bs.ReadByte() ); } } }
Sin embargo, hay una forma ms eficiente todava de leer ficheros de texto, y es suponer que efectivamente se trata de ficheros de texto. Lo hacemos en el siguiente ejemplo:
using System; using System.IO; public class file2 { public static void Main ( string[] args) { StreamReader lector=File.OpenText(args[0]); string linea; do { linea = lector.ReadLine(); if ( linea != null ) { Console.WriteLine( linea ); } } while( linea !=null); lector.Close(); } }
A continuacin se muestra un ejemplo donde, cada vez que el programa es ejecutado se sobrescribe el contenido del archivo en caso de que este exista, si no existe se crea:
using System; using System.IO; class App{ public static void Main(){ FileStream f = new FileStream("nuevo.txt", FileMode.Create);
StreamWriter s = new StreamWriter(f); for(int iNumberLine = 1; iNumberLine <= 10; iNumberLine++){ s.WriteLine("Linea " + iNumberLine); } s.Close(); f.Close(); } }
El tratamiento de archivos resulta ser una prctica muy comn en cualquier sitio web. Muy a menudo nos vemos en la necesidad de procesar un texto para cambiarle el formato, buscar una cadena en su interior o cualquier otro tipo de operacin. PHP propone un sinfn de funciones para la gestin de archivos que van desde las ms elementales de apertura, lectura y cierre a otras ms rebuscadas como el clculo de espacio en el disco duro, tamao del archivo, gestin de derechos de acceso, etc. En este artculo pretendemos mostrar cules son las funciones ms esenciales para el tratamiento de archivos para posteriormente ejemplificarlas en un par de scripts que nos pueden resultar tiles:
fpassthru lee completamente el archivo y lo muestra fclose Cierra el archivo abierto previamente
Las operaciones ms elementales, copia, borrado y cambiar el nombre, requieren nicamente el nombre (y path) del archivo sobre el cual se ejerce la operacin.
Para operaciones ms complejas, como la lectura de lneas o la escritura de texto dentro del archivo, se requiere de una previa apertura del archivo al cual le asignaremos un identificador $id. Una vez abierto el archivo, podremos desplazarnos a lo largo de l por medio de un puntero imaginario que avanza o retrocede por las lneas de texto y mediante el cual nos situaremos en el lugar escogido para insertar, modificar o simplemente copiar una cadena. Existen distintos modos de apertura que nos permiten definir las acciones que podemos realizar sobre el archivo. Aqu mostramos los diferentes modos que, como vemos, son de lo ms variado: Modos de apertura de archivos
Sintaxis 'r' 'r+' 'w' 'w+' 'a' 'a+' Slo lectura Lectura y escritura Slo escritura Lectura y escritura. Suprime el contenido anterior si se escribe. El archivo es creado si no existe. Slo escritura. El archivo es creado si no existe y el puntero se coloca al final. Lectura y escritura. El archivo es creado si no existe y el puntero se coloca al final. Descripcin
Para poder abrir un archivo utilizamos la funcin fopen y posteriormente para leer el contenido de un archivo se realiza mediante la funcin fgets, esta funcin se encarga de leer lnea a lnea el contenido de un archivo texto por lo que su utilizacin ha de ser incluida dentro de una estructura de tipo bucle. En el ejemplo que mostramos a continuacin nos hemos servido de esta lectura secuencial para localizar dentro del texto una cadena cualquiera a la que, a continuacin, le cambiamos el formato para ponerla en negrita por medio de la etiqueta <b>. Esto nos puede resultar til si llevamos a cabo bsquedas internas en nuestro sitio y queremos resaltar la cadena de bsqueda en el texto de la pgina encontrada. Evidentemente, la utilidad de fgets resulta ser mucho ms amplia. Podemos emplearla, por ejemplo, con archivos remotos para extraer las etiquetas meta o para muchas otras cosas que se nos puedan ocurrir. A continuacin se presenta el script:
//Iniciamos la variable $texto = ""; //Abrimos el archivo en modo lectura $fp = fopen($path,"r"); //Leemos linea por linea el contenido del archivo while ($linea= fgets($fp,1024)) { //Sustituimos las ocurrencias de la cadena que buscamos $linea = str_replace($cadena,"<b>$cadena</b>",$linea); //Anadimos la linea modificada al texto $texto .= $linea; } return $texto; } //Definimos el path y la cadena $path="escribe el camino de acceso a tu archivo"; $cadena = "escribe tu cadena"; //Llamamos la funcion $texto = negrita ($path,$cadena); //Mostramos el texto echo $texto; ?>
En este ejemplo se analiza la bsqueda de un registro o rengln determinado. En este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacin proporcionando un dato de bsqueda generalmente la clave del registro. Ejemplo:
<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 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); }; ?>
Recordar que la caracterstica principal de un archivo secuencial, es que no es posible acceder o accesar a un registro o rengln especifico o determinado sino que se deber recorrer todos los n-1 renglones anteriores. Esta situacin se da porque al construir un registro cualquiera con un montn de campos strings a la hora de almacenar dichos registros, estos registros tendrn tamaos diferentes, esta es la razn principal por la cual al buscar un registro especfico se tiene que recorrer y validar todos los registros anteriores. En el programa ejemplo se est usando un ciclo while (!eof(ARCHIVO)) para recorrer todos los registros del archivo (eof=end of file), por supuesto que si se tiene un archivo con 5000 registro y el buscado es el 4500 al menos se tendr que recorrer todos los 4499 registros anteriores.
Existen adems muchas otras operaciones asociadas a archivos las mas elementales son: 1.- Creacin de Archivo.- En este proceso se pretende solamente crear un archivo nuevo en disco, con su nombre, tipo y especialidad de almacenamiento de datos apropiado. 2.- Apertura de Archivos.- En este caso se pretende abrir un archivo ya existente en disco para procesarlo, ya sea cargar o grabar datos en sus registros, o leer algun registro en especial para mandarlo a una variable de cualquier tipo. No confundir creacin con apertura creacin es un proceso que solo se ejecuta una sola vez en la vida de un archivo, mientras que apertura siempre se esta realizando por los programas especializados en algun proceso. 3.-Cierre de archivos: Es la operacin mas importante en cualquier programa que maneje archivos o se cierra el archivo como ultima instruccin del pograma o se vera el anuncio ABORT,RETRY,FAIL. 4.-Altas en archivo.- En este proceso se carga una clase en memoria con sus datos pertinentes y se graba la clase en el archivo en disco. 5.-Lectura de archivo.- En este proceso, se abre el archivo y se manda el registro de disco, a una clase en memoria para su procesamiento. 6.- Consulta de archivos: En este proceso se pretende desplegar todos los registros del archivo en disco a la pantalla ya sea consola o mejor an, a una pagina html 7.-Busqueda en archivos: Una de las operaciones mas comunes, consiste en que el usuario pide toda la informacin de algun renglon en disco, porporcionando la informacin de algun campo, generalmente el campo clave de la clase. 8.- Filtros.- En este proceso el usuario esta interesado en algun conjunto de renglones con caracteristicas comunes (condicin), por ejemplo todos los alumnos de sistemas, o todos los empleados que ganen mas de $500.00 pesos, o todos los clientes que sean de tijuana, etc 9.-Modificaciones de registros o archivos: Problema muy comun, donde los datos originales ya grabados se tienen que cambiar o actualizar, por ejemplo el nombre no era juan es juana, o la calificacin no es 100 es 20, etc. 10.- Bajas de registros: tambien muy comun este proceso por ejemplo el alumno ya egreso, el cliente huyo, etc. Grabacin de archivos secuenciales en Java:
Grabacin y lectura son los dos procesos mas comunes con archivos en cualquier lenguaje de programacin. Cdigo de grabacin:
import java.lang.*; import java.io.*; class prog22 { public static void main(String[] args) { // crear un objeto de tipo archivo DataOutputStream archivo = null; // creando e inicializando los campos del registro // observar que se debe usar clases numericas apropiadas int clave=0; String nombre=new String(""); int edad=0; // creando objeto teclado BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); // abriendo archivo, capturando y grabando datos try { //* Creando y grabando a un archivo, esta larga la instruccin*/ archivo = new DataOutputStream( FileOutputStream("c:\\pfacil\\archivo1.dat",true) ); System.out.println("dame clave: "); clave = Integer.parseInt(teclado.readLine()); System.out.println("dame nombre: "); nombre=teclado.readLine(); System.out.println("dame edad: "); edad = Integer.parseInt(teclado.readLine()); //grabando al archivo archivo.writeInt(clave); archivo.writeUTF(nombre); new
archivo.writeInt(edad); archivo.close(); } catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ } catch (IOException ioe) { /* Error al escribir */ } } // cierra main } // cierra clase
Lectura de archivos secuenciales en Java: El proceso de lectura de los registros de un archivo secuencial es realmente sencillo, como lo muestra el siguiente cdigo ejemplo:
import java.lang.*; import java.io.*; class prog23 { public static void main(String[] args) { // crear un objeto de tipo archivo DataInputStream archivo = null; // creando e inicializando los campos del registro // observar que se debe usar clases numericas apropiadas int clave=0; String nombre=new String(""); int edad=0; try{ //* abriendo archivo para lectura */ archivo = new DataInputStream( new FileInputStream("c:\\pfacil\\archivo1.dat") ); //leyendo archivo while (true) { clave=archivo.readInt();
System.out.println(clave+" "); nombre=archivo.readUTF(); System.out.println(nombre+" "); edad=archivo.readInt(); System.out.println(edad+" "); System.out.println('\n'); } } catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ } catch (IOException ioe) { /* Error al escribir */ } // cerrar archivo archivo.close(); } // cierra main } // cierra clase
Bsqueda de archivos secuenciales en Java: El primer proceso para un archivo secuencial es agregar una cantidad indefinida de registros al archivo este proceso se resuelve o ejecutando una cantidad indeterminada de veces el programa de grabacin ya hecho o incluir un ciclo while en el mismo programa. Un segundo proceso tambin comn, llamado consulta es desplegar todos los registros del archivo a la vez problema tambin resuelto en el programa de lectura. El tercer Proceso que resolvemos en este tema es la bsqueda de un registro determinado, en este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacin, proporcionando un dato de bsqueda, generalmente la clave del registro. La solucin es sencilla, solo tenemos que abrir el archivo para lectura, hacer un ciclo while (true) condicionar y solo desplegar el registro cuando se cumpla la condicin. Cdigo:
import java.lang.*; import java.io.*; class prog24 {
public static void main(String[] args) { // crear un objeto de tipo archivo DataInputStream archivo = null; //variables int clave=0; int clavebuscar=0; String nombre=""; int edad=0; // capturando clave a buscar // creando un objeto llamado teclado especializado en capturas BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); // capturando datos try { System.out.println("dame Clave a buscar: "); clavebuscar = Integer.parseInt(teclado.readLine()); } catch(IOException variablerror) {System.out.println("error de captura "); } //* abriendo archivo para lectura */ try{ archivo = new DataInputStream( new FileInputStream("c:\\pfacil\\archivo1.dat") ); //leyendo archiv while (true) { clave=archivo.readInt(); nombre=archivo.readUTF(); edad=archivo.readInt(); if (clavebuscar==clave){ System.out.println(clave+" "); System.out.println(nombre+" "); System.out.println(edad+" ");
System.out.println('\n');}; }; } catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ } catch (IOException ioe) { /* Error al escribir */ } // cerrar archivo archivo.close(); } // cierra main } // cierra clase
Filtros o condiciones de archivos secuenciales en Java: Como su nombre lo indica en este proceso se pretende desplegar todo un conjunto de renglones que cumplan con la condicin por ejemplo se pide desplegar todos los alumnos de sistemas o todos los empleados que sean de Sinaloa, etc. Filtros se usan para obtener informacin acerca de un subconjunto de renglones del archivo. Cdigo:
import java.lang.*; import java.io.*; class prog25 { public static void main(String[] args) { // crear un objeto de tipo archivo DataInputStream archivo = null; //variables int clave=0; String nombre=""; int edad=0; int edadfiltro=0; // capturando condicion // creando un objeto llamado teclado especializado en capturas BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
// capturando datos try { System.out.print("EDAD >= : "); edadfiltro = Integer.parseInt(teclado.readLine()); } catch(IOException variablerror) {System.out.println("error de captura "); } //* abriendo archivo para lectura */ try{ archivo = new DataInputStream( new FileInputStream("c:\\pfacil\\archivo1.dat") ); //leyendo archivo while (true) { clave=archivo.readInt(); nombre=archivo.readUTF(); edad=archivo.readInt(); if (edad >= edadfiltro){ System.out.print(clave+" "); System.out.print(nombre+" "); System.out.print(edad+" "); System.out.print('\n');}; }; } catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ } catch (IOException ioe) { /* Error al escribir */ } // cerrar archivo archivo.close(); } // cierra main } // cierra clase
Baja o eliminacin de un archivo secuencial en Java: Eliminar o dar de baja en un archivo secuencial, implica tener que estar procesando dos archivos a la vez, el segundo de ellos es un archivo temporal, un algoritmo de eliminacin fsica quedara como:
Procedimiento: 1.- Abrir el archivo original en modo lectura. 2.- Abrir un archivo llamado temporal en modo escritura. 3.- Iniciar un ciclo de lectura del archivo original. 3a.- Dentro del ciclo leer el primer registro. 3b.- Validar el registro si no es eliminable, se escribe al archivo temporal. 3c.- Fin de ciclo (cerrar el ciclo). 4.- Cerrar ambos archivos. 5.- eliminar el archivo original. 6.- renombrar el archivo temporal con el nombre de archivo original. Una segunda tcnica, consiste en agregar un campo de estado (status) al registro, tal como se vio en el curso anterior: Sin embargo el proceso de baja se tiene que realizar en un sistema de informacin, para resolver este problema la respuesta es agregar un campo especial llamado status que puede ser de tipo char, con algunos caracteres de control que se puedan cargar en el por ejemplo una 'a' significa que est en alta, una 'b' significa que est en baja, etc. Lo unico que se tiene que hacer, es que cuando se agrega o manda el registro por primera vez a disco, mandarlo cargado el campo de status con 'a' y estar validando con if siempre este campo en cualquier proceso de bsqueda o condicin o despliegue, si se encuentra cargado con 'b' entonces solo avisar al usuario que est de baja dicho registro.
Operaciones con campos Java: Solo usar los dos archivos el original y el temporal y antes de grabarse al temporal hacer la operacin correspondiente, como lo muestra el siguiente ejemplo:
import java.lang.*;
import java.io.*; class prog27 { public static void main(String[] args) { // crear un objeto de tipo archivo DataInputStream archivo = null; DataOutputStream archtemp = null; //variables int clave=0; String nombre=""; int edad=0; try { //creando archivo temporal archtemp = new DtaOutputStream( FileOutputStream("c:\\pfacil\\temporal.dat",true) ); new
archivo = new DataInputStream( new FileInputStream("c:\\pfacil\\archivo1.dat") ); //leyendo archivo while (true) { clave=archivo.readInt(); nombre=archivo.readUTF(); edad=archivo.readInt(); // sumando +10 a las edades edad=edad+10; //grabando al archivo temporal archtemp.writeInt(clave); archtemp.writeUTF(nombre); archtemp.writeInt(edad); } } catch(IOException variablerror) { } try { // cerrar archivos
archivo.close(); archtemp.close(); // eliminando original renombrando temporal File file1 = new File("c:\\pfacil\\archivo1.dat"); File file2 = new File("c:\\pfacil\\temporal.dat"); if (file1.exists()) {file1.delete();}; file2.renameTo(file1); // avisando System.out.println("EDADES + 10"); } catch(IOException variablerror) {System.out.println("ERROR "); } } // cierra main } // cierra clase
Edicin o modificacin de archivos secuenciales en Java: Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacin o para corregir algn error de captura original o para agregar alguna columna que no exista por modificacin de la tabla o la base de datos. La solucin es similar a los temas anterior, es decir se ocupan los dos archivos el original y el temporal y ya sea que se modifique una sola clave o se modifiquen todos los registros, el ejemplo que se construye va mostrando los registros del archivo y pregunta y modifica o edita el registro pedido. Cdigo:
import java.lang.*; import java.io.*; class prog28 { public static void main(String[] args) { // crear un objeto de tipo archivo DataInputStream archivo = null; DataOutputStream archtemp = null; //variables int clave=0;
String nombre=""; int edad=0; char opcion ='n'; // creando objeto teclado BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); try { //creando archivo temporal archtemp = new DataOutputStream( FileOutputStream("c:\\pfacil\\temporal.dat",true) ); new
archivo = new DataInputStream( new FileInputStream("c:\\pfacil\\archivo1.dat") ); //leyendo archivo while (true) { clave=archivo.readInt(); System.out.print(clave+" "); nombre=archivo.readUTF(); System.out.print(nombre+" "); edad=archivo.readInt(); System.out.print(edad+" "); System.out.print('\n'); System.out.print("editar s/n :"); opcion=(teclado.readLine()).charAt(0); if(opcion=='s'){ System.out.print("dame nuevo nombre: "); nombre=teclado.readLine(); System.out.print("dame nueva edad: "); edad = Integer.parseInt(teclado.readLine()); }; //grabando al archivo temporal archtemp.writeInt(clave);
archtemp.writeUTF(nombre); archtemp.writeInt(edad); } } catch(IOException variablerror) { } try { // cerrar archivos archivo.close(); archtemp.close(); // eliminando original renombrando temporal File file1 = new File("c:\\pfacil\\archivo1.dat"); File file2 = new File("c:\\pfacil\\temporal.dat"); if (file1.exists()) {file1.delete();}; file2.renameTo(file1); // avisando System.out.println("YA SE EDITO"); } catch(IOException variablerror) {System.out.println("ERROR "); } } // cierra main } // cierra clase
Se refiere al procesamiento de los registros, no importa el orden en que se haga, para eso los registros estn organizados en forma de una lista y recuperarlos y procesarlos uno por uno de principio a fin.
Rudimentos de los archivos Secuenciales; dependiendo del dispositivo de almacenamiento utilizado el archivo se puede mostrar el usuario como si fuera un sistema secuencial. Al finalizar un archivo secuencial se denota con una marca de fin de archivo. (End end-of-file) El usuario de un archivo secuancial puede ver los registros en un orden secuancial simple. La nica forma de recuperar registros es comenzar al principio y extraerlos en el orden contemplado.
< xml="true" ns="urn:schemas-microsoft-com:office:office" prefix="o" namespace="">
Los archivos secuenciales se denominan de esta manera por que la forma de escribir y leer los datos en un archivo es, desde el principio hasta el fin del archivo, es decir, si yo quisiera acceder a un determinado dato del archivo y este dato se encuentra en la mitad del archivo, para llegar a ese dato necesito pasar por todos los dems datos, de forma secuencial. Por lo general se suelen utilizar los archivos secuenciales, para trabajar con archivos que contengan una estructura de datos no muy compleja. Append: esta sentencia se utiliza para agregar informacin a un archivo de texto. Input: la sentencia Input se utiliza para leer datos de un archivo de texto, lee todo el contenido del archivo de una sola ves. Output: esta sentencia se utiliaza para crear un archivo de texto y grabar datos. sentencia Write: escribe datos en un archivo separados por comas. Line Input: lee un archivo de texto lnea por lnea. Print : para escribir datos en archivos de texto.tos en archivos de texto. EJEMPLO: LO QUE HACE ESTE EJEMPLO ES LEER UN ARCHIVO DE TEXTO Y CUENTA LAS LINEAS DE EL MISMO TEXTO:
*Le ponemos otro command Button que es el de salir con su respectivo cdigo que es end Este es el cdigo que ponemos en el command contar: Public Funtion Contar_Lineas (ByVal srtTextFile As string) As Long< xml="true" ns="urn:schemas-microsoft-com:office:office" prefix="o" namespace="">
Abre el archive de texto lnea por lnea hasta el final Do Lee una lnea Line input #f, srt_linea
Incrementa la cantidad de lneas ledas Lineas = lineas + 1 Leera hasta que llegue al fin de archivo Loop While not EOF(F) Cierra el archive de texto abierto Close #f Retorna a la funcin el nmero de lneas del fichero Contar_lineas = lineas
End Function
Dim Path As String Path = InputBox( Ingrese la ruta de un archivo de texto ,_ contar lineas ) If Path = vbNullString Then Exit sub
End Sub
La creacin de un archivo secuencial de transacciones incluye la tarea de recolectar datos, convertir los datos a una forma legible para la mquina, editar los datos, convertir los movimientos rechazados y ordenar los datos editados. Es un sencillo ejemplo que te ayudar a entender cmo se manejan los archivos secuenciales en Delphi. Aqu est el cdigo fuente:
DELPHI: 1. unit Unit1; 2. 3. interface 4. 5. uses 6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7. Dialogs, StdCtrls; 8. 9. type 10. TForm1 = class(TForm) 11. Memo: TMemo; 12. archivo: TEdit; 13. Button1: TButton; 14. Button2: TButton; 15. Button3: TButton; 16. Button4: TButton; 17. Label1: TLabel; 18. Label2: TLabel; 19. Label3: TLabel; 20. Label4: TLabel; 21. Label5: TLabel; 22. Label6: TLabel; 23. letras: TLabel; 24. digitos: TLabel; 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. blancos: TLabel; caracteres: TLabel; consonantes: TLabel; vocales: TLabel; procedure procedure procedure procedure Button4Click(Sender: Button3Click(Sender: Button1Click(Sender: Button2Click(Sender: TObject); TObject); TObject); TObject);
39. var 40. Form1: TForm1; 41. 42. implementation 43. 44. {$R *.dfm} 45. 46. procedure TForm1.Button4Click(Sender: TObject); 47. begin 48. form1.close 49. end; 50. 51. procedure TForm1.Button3Click(Sender: TObject); 52. begin 53. archivo.Text:=''; 54. letras.caption:=''; 55. digitos.caption:=''; 56. blancos.caption:=''; 57. caracteres.caption:=''; 58. vocales.caption:=''; 59. consonantes.caption:=''; 60. memo.Text:=''; 61. memo.SetFocus; 62. end; 63. 64. procedure TForm1.Button1Click(Sender: TObject); 65. begin 66. memo.Lines.LoadFromFile(archivo.text); 67. end; 68. 69. procedure TForm1.Button2Click(Sender: TObject); 70. var 71. l,d,b,v,c,ce,a,band:integer; 72. x:char; 73. begin 74. l:=0; 75. d:=0; 76. b:=0; 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. v:=0; c:=0; ce:=0; a:=0; while a<>length(memo.Text) do begin band:=0; a:=a+1; x:=memo.text[a];
87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125.
if x in ['A'..'Z','a'..'z','','','','','','','','','','','',''] then begin l:=l+1; band:=1; end; if x in ['0'..'9'] then begin d:=d+1; band:=1; end; if x=' ' then begin b:=b+1; band:=1; end; if x in ['a','e','i','o','u','A','E','I','O','U','','','','','','','','','',''] then begin v:=v+1; band:=1; end; if band=0 then ce:=ce+1; end; letras.caption:=inttostr(l); digitos.caption:=inttostr(d); blancos.caption:=inttostr(b); vocales.caption:=inttostr(v); consonantes.caption:=inttostr(l-v); caracteres.caption:=inttostr(ce); end; end.
Bibliografa:
http://www.mitecnologico.com/Main/EstructuraArchivosOrganizacionSecuencial