Lp Cadenas

64
CAPITULO 8 CADENA DE CARACTERES, ESTRUCTURAS Y ARCHIVOS 8.1.- CADENA DE CARACTERES Una cadena de caracteres es un arreglo unidimensional, en el cual todos sus elementos son de tipo char. La siguiente tabla resume las funciones más simples que realizan las operaciones de E/S por consola. 8.1.1.- Inicialización de cadenas Un arreglo de caracteres puede ser inicializada asignándole una literal. Ejemplo1 inicialización de cadenas Option Explicit On Option Strict On Imports System.IO Module Module1 Sub main() Dim Micadena As String Micadena = "Este es un ejemplo de una cadena en VB" Console.WriteLine(Micadena) console.readline End Sub End Module 8.2 LECTURA Y ESCRITURA DE CADENAS Ejemplo Option Explicit On Option Strict On Imports System.IO Module Module1 Sub main()

Transcript of Lp Cadenas

Page 1: Lp Cadenas

CAPITULO 8CADENA DE CARACTERES, ESTRUCTURAS Y ARCHIVOS

8.1.- CADENA DE CARACTERES

Una cadena de caracteres es un arreglo unidimensional, en el cual todos sus elementos son de tipo char. La siguiente tabla resume las funciones más simples que realizan las operaciones de E/S por consola.

8.1.1.- Inicialización de cadenas

Un arreglo de caracteres puede ser inicializada asignándole una literal.

Ejemplo1 inicialización de cadenas

Option Explicit OnOption Strict OnImports System.IOModule Module1 Sub main() Dim Micadena As StringMicadena = "Este es un ejemplo de una cadena en VB" Console.WriteLine(Micadena) console.readline End SubEnd Module

8.2 LECTURA Y ESCRITURA DE CADENAS

Ejemplo

Option Explicit OnOption Strict OnImports System.IOModule Module1 Sub main() Dim s1 As String Console.Write("como te llamas ") s1 = Console.ReadLine() Console.WriteLine("mucho gusto {0} ", s1) Console.ReadLine() End SubEnd Module

Page 2: Lp Cadenas

8.3 ARREGLO DE CADENA DE CARACTERES

Un arreglo de caracteres es un arreglo donde cada elemento es a su vez un arreglo de caracteres dicho de otra forma es un arreglo de dos dimensiones de tipo char.

Option Explicit OnOption Strict OnModule Module1 Sub main() Dim n As Integer Const maxfilas As Integer = 10 Dim nombre(maxfilas) As String Console.Write(" cuantos nombres ") n = CInt(Console.ReadLine()) Console.WriteLine(" ingrese {0} nombres ", n) For i = 0 To n - 1 nombre(i) = Console.ReadLine Next Console.WriteLine("los nombres ingresados son ") For i = 0 To n - 1 Console.WriteLine(" {0 }", nombre(i)) Next Console.ReadLine() REM End SubEnd Module

8.4 FUNCIONES PARA TRATAMIENTO DE CADENAS (visto en cap2)

A continuación las mas importantes de ellas.

1.1 - Función Lcase y Ucase

La función Lcase cambia o convierte una cadena de texto a minúscula La función Ucase convierte el contenido de una cadena a mayúsculas.

Option Explicit OnOption Strict OnModule Module1 Sub Main() Dim cadena As String Console.Write("Ingrese una cadena ") cadena = Console.ReadLine Console.WriteLine("Cadena en Mayusculas {0} ", UCase(cadena)) Console.WriteLine("Cadena en Minusculas {0} ", LCase(cadena))

Page 3: Lp Cadenas

Console.ReadLine() End SubEnd Module

1.2 - Función Trim, LTrim y RTrim

Estas tres funciones se utilizan para eliminar los espacios vacíos de una cadena. LTrim elimina los espacios vacíos de la parte izquierda de la cadena, RTrim de la parte derecha y Trim de ambas partes.

1.3 - Función Len

La función Len nos permite conocer la cantidad de caracteres que tiene una determinada cadena. O sea que esta función nos devuelve un número.

Module Module1 Sub Main() Dim cadena As String cadena = " HOLA PERU " Console.WriteLine("Cadena en original {0} len {1}", cadena, Len(cadena)) Console.WriteLine(" LTrim(cadena) {0} len {1} ", LTrim(cadena), Len(LTrim(cadena))) Console.WriteLine(" RTrim(cadena) {0} len {1}", RTrim(cadena), Len(RTrim(cadena))) Console.WriteLine(" Trim(cadena) {0} len {1}", Trim(cadena), Len(Trim(cadena))) Console.ReadLine() End SubEnd Module

1.4 - Función Asc y Chr

La función Asc nos permite obtener el código ASCII de un de terminado caracter. La Función Chr actúa a la inversa de la función Asc, esto quiere decir, que a partir de un determinado número nos devolverá el caracter ASCII.

Module Module1 Dim letra As Char Dim num As Integer Sub Main() Console.Write("Ingrese una letra") letra = Console.ReadLine Console.WriteLine("el codigo de la letra es {0}", Asc(letra)) Console.Write("Ingrese un numero") num = Console.ReadLine

Page 4: Lp Cadenas

Console.WriteLine("el caracter asociado es {0}", Chr(num)) Console.ReadLine() End SubEnd Module

1.5 - Función InsTr

La función InStr se utiliza para buscar una cadena o parte de una cadena dentro de otra cadena.Si la función encuentra la cadena a buscar devuelve un número que representa la posición donde encontró la cadena, si no la encuentra devuelve un 0.Los parámetros que lleva esta función son:

InStr (comienzo, Cadena donde buscar , La Cadena a buscar)

Module Module1 Dim posicion As Integer Sub Main() posicion = InStr(3, " El perro salta {0}", "salta") Console.WriteLine("posicion de la subcadena {0}", posicion) Console.ReadLine() End Sub

1.6 Función Left, Right y Mid

Estas funciones son utilizadas para extraer partes de una cadena. La función Left: tiene 2 parámetros: El primero es la cadena de la cual se extraerán caracteres, y el segundo un número desde el cual comenzar a extraer caracteres desde la parte izquierda. Función Right: Es igual que la función Left pero comienza a extraer caracteres desde el lado derecho de la cadena.

La función Mid: Tiene la misma función que las anteriores pero posee tres parámetros. Su sintaxis es: Mid (cadena, inicio, longitud)El parámetro cadena es la cadena a extraer caracteres. El parámetro Inicio es donde comenzar y el parámetro longitud, es la cantidad de caracteres a extraer de la cadena de caracteres

Module Module1 Dim posicion As Integer Sub Main() Dim Cadena As String = "INGENIERIA INDUSTRIAL" Console.WriteLine(" cadena original {0} :", Cadena) Console.WriteLine(" 5 caracteres a la izqueirda {0} :", Left(Cadena, 5))

Page 5: Lp Cadenas

Console.WriteLine(" 5 caracteres a la derecha {0} :", Right(Cadena, 5)) Console.WriteLine(" mid( cadena, 5,4 ) {0} :", Mid(Cadena, 5, 4)) Console.ReadLine() End SubEnd Module

1.7 - Función Str y Val

La función Val convierte una cadena en un número y la función Str un número en una cadena.

Option Explicit OnOption Strict OnModule Module1 Dim cadena, cadena2 As String Sub Main() cadena = "123456" cadena = CStr(Val(cadena)) 'Ahora cadena vale 123456 cadena2 = CStr(123456) cadena2 = Str(cadena2) 'Ahora cadena2 vale "123456" Console.ReadLine() End SubEnd Module

Operadores de concatenación en Visual Basic

Los operadores de concatenación combinan varias cadenas en una sola. Hay dos operadores de concatenación: + y &. Los dos realizan la operación de concatenación básica, como se muestra en el ejemplo siguiente.

Option Explicit OnOption Strict OnModule Module1 Sub main() Dim x As String = "Con" & "caten" & "ation" Dim y As String = "Con" + "caten" + "ation" Console.WriteLine(" {0 }", x) Console.WriteLine(" {0 }", y) Console.ReadLine() End SubEnd Module

Comparacion de cadenas

StrComp (Función, Visual Basic)Devuelve un valor, -1, 0 ó 1, que indica el resultado de una comparación de cadena.'DeclarationPublic Shared Function StrComp ( _

String1 As String, _String2 As String, _Compare As CompareMethod _

) As Integer

Page 6: Lp Cadenas

ParámetrosString1 Obligatorio. Cualquier expresión String válida.String2 Obligatorio. Cualquier expresión String válida.Compare

Opcional. Especifica el tipo de comparación entre cadenas. Si se omite Compare, el valor Option Compare determinará el tipo de comparación.

Option Explicit OnOption Strict OnModule Module1 Sub main() Dim cadena1 As String = "Verde" Dim cadena2 As String = "Azul" Dim l As Integer l = StrComp(cadena1, cadena2) Console.WriteLine(" cadena1 {0} cadena2 = {1} resultado {2}", cadena1, cadena2, l) cadena1 = "Azul" cadena2 = "Verde" l = StrComp(cadena1, cadena2) Console.WriteLine(" cadena1 {0} cadena2 = {1} resultado {2}", cadena1, cadena2, l) cadena1 = "Azul" cadena2 = "Azul" l = StrComp(cadena1, cadena2) Console.WriteLine(" cadena1 {0} cadena2 = {1} resultado {2}", cadena1, cadena2, l) Console.ReadLine() End SubEnd Module

Ejemplo de InStr .- Buscar una sub cadena en una cadena

Page 7: Lp Cadenas

Option Explicit OnOption Strict OnModule Module1 Sub main() Const max As Integer = 10, maxlong As Integer = 40 Dim cad1, cad2 As String Dim i As Integer, nro As Integer = 7 Dim alumnos() As String = {"JUAN CARLOS JUAREZ", "JUAN DE MATA", "JUAN CARLOS TORREBLANCA", "JUAN CARLOS LIZARRAGA", "ISMAEL VELIZ VILCA", "GRABIEL CASA QUISPE", "EFRAIN MURILLO QUISPE"} ReDim Preserve alumnos(max) Console.WriteLine(" alumnos ") For i = 0 To nro - 1 Console.WriteLine(" {0} ", alumnos(i)) Next Console.WriteLine(" INGRESE SUBCADENA A LISTAR :") cad1 = Console.ReadLine() Console.WriteLine(" alumnos que contiene la cadena {0} ", cad1) For i = 0 To nro - 1 cad2 = CStr(InStr(alumnos(i), cad1)) If (CDbl(cad2) > 0) Then Console.WriteLine(" {0} ", alumnos(i)) End If Next Console.ReadLine() End SubEnd Module

CONVERSION DE CADENA a numero y viceversa

Option Explicit OnOption Strict On

Module Module1 Sub main() Dim cadena1 As String = "1234" Dim cadena2 As String = "300" Dim cadena3 As String = "400" Dim nro1, nro2 As Integer Dim nro3 As Single = 3.1416 Console.WriteLine(" Cadenas originales {0} {1} ", cadena1, cadena2) nro1 = CInt(cadena1) nro2 = CInt(cadena2) Console.WriteLine(" Suma de cadena convertida {0} +{1} ={2}", nro1, nro2, nro1 + nro2) cadena3 = CStr(nro3) Console.WriteLine(" Cadena concatenada {0}", cadena1 + " " + cadena2 + " " + cadena3) Console.ReadLine() End SubEnd Module

Page 8: Lp Cadenas

FUNCION ToString Convierte un numero a cadena ( los números tambien pueden ser reales)

Module Module1 Sub Main() Dim i As Integer = 45 Dim valor As String valor = i.ToString() Console.WriteLine(" El valor de cadena es {0}", valor) Console.Read() End SubEnd Module

4 FUNCION PARSE

Convierte una cadena que representa un número entero a un enteroModule Module1 Sub Main() Dim i As Integer Dim valor As String = "31000" i = Integer.Parse(valor) Console.WriteLine(" opcion 1 = {0}", i) i = i.Parse(valor) Console.WriteLine(" opcion 2 = {0}", i) Console.Read() End SubEnd Module

Convertir una cadena a un número real Module Module1 Sub Main() Dim X As Single Dim valor As String = "3.1416" X = Single.Parse(valor) Console.WriteLine(" opcion 1 = {0}", X) X = X.Parse(valor) Console.WriteLine(" opcion 2 = {0}", X) Console.Read() End SubEnd Module

Comparación de cadenas en base a un patrón. El operador Like

El operador Like permite realizar una comparación entre dos cadenas, en base a un patrón establecido en una de ellas. El formato de uso se muestra en el Código fuente

Resultado = Cadena Like Patrón

Resultado. Valor lógico con el resultado de la comparación. Verdadero indica que hay una coincidencia de Cadena con Patrón. Falso indica que no se ha producido coincidencia de Cadena con Patrón.

Cadena. Cadena de caracteres que se compara con el patrón de coincidencia.

Page 9: Lp Cadenas

Patrón. Cadena de caracteres en donde se especifican los caracteres especiales que sirven de patrón de coincidencia respecto al valor de Cadena. La Tabla 7 muestra los caracteres y convenciones de uso establecidas por el lenguaje para el uso de patrones de comparación.

Carácter del patrón Coincidencia en la cadena a buscar? Cualquier único carácter* Varios caracteres o ninguno# Cualquier único número[ListaCaracteres] Cualquier único carácter que se encuentre dentro de la lista[!ListaCaracteres] Cualquier único carácter que no se encuentre dentro de la lista

Tabla 7. Caracteres patrón del operador Like.

Debemos tener en cuenta que los resultados obtenidos en expresiones que utilicen este operador estarán condicionadas por la configuración establecida mediante Option Compare. Revise el lector el apartado sobre comparación de cadenas en donde se describe esta instrucción.Cuando utilicemos los corchetes para establecer una lista de caracteres a comparar, debemos emplear el guión ( - ) como separador de rangos. Si necesitamos que alguno de los caracteres patrón estén entre los que vamos a buscar, debemos encerrarlo entre corchetes.

Ejemplos de uso de este operador.

Option Explicit OnOption Strict OnImports SystemModule Module1 Sub main() ' ejemplos con el operador Like Dim Resultado As Boolean Resultado = "HOLA" Like "HO?A" Console.WriteLine(Resultado) Resultado = "AZUL" Like "A?U?" Console.WriteLine(Resultado) Resultado = "PROFESOR" Like "PR?FESO" Console.WriteLine(Resultado) Resultado = "La gran llanura" Like "La * llanura" Console.WriteLine(Resultado) Resultado = "Ingenieria industrial " Like "Ing* indu*" Console.WriteLine(Resultado) Resultado = "sueldo 2345 soles" Like "Sueldo ##4# soles" Console.WriteLine(Resultado) ' patrón [Lista] Resultado = "H" Like "[A-M]" Console.WriteLine(Resultado) Resultado = "h" Like "[A-M]" Console.WriteLine(Resultado) Resultado = "D" Like "[!P-W]" Console.WriteLine(Resultado)

Page 10: Lp Cadenas

Resultado = "R" Like "[!P-W]" Console.WriteLine(Resultado) Resultado = "" Like "" Console.ReadLine() End SubEnd Module

8.5 ESTRUCTURAS

Una estructura es una generalización del tipo definido por el usuario (UDT) admitido por versiones anteriores de Visual Basic. Además de campos, las estructuras pueden exponer propiedades, métodos y eventos. Una estructura puede implementar una o más interfaces, y se pueden declarar niveles de acceso individuales para cada campo.

Para crear una estructura se pueden combinar elementos de datos de distintos tipos. Una estructura asocia uno o más elementos entre ellos y con la propia estructura. Al declarar una estructura, ésta se convierte en un tipo de datos compuesto y se pueden declarar variables de este tipo.

Las estructuras son útiles si se desea que una única variable contenga varios datos relacionados. Por ejemplo, quizás desee mantener juntos el nombre de un empleado, su extensión telefónica y su salario. Podría utilizar varias variables para esta información, o bien definir una estructura y utilizarla para una única variable de empleado. La ventaja de la estructura se hace evidente si tiene muchos empleados y, por consiguiente, muchas instancias de la variable.

Una estructura es una colección de datos de diferentes tipos lógicamente relacionados (también se conoce con el nombre de registros).

8.7.1 Creación de una estructura.-Crear una estructura es definir un nuevo tipo de datos denominado tipo estructura y declarar una variable de ese tipo.

Private Structure nonbreEstructura declaración de campos

End Structure

nombreestructuraa.- Es un identificador que nombra el nuevo tipo definido; después de definir un tipo estructura, podemos declarar una variable de ese tipo de la forma:

Una declaración es una sentencia no se ha declarado una variable solo se ha definido la forma de los datos (descriptor de tipo). Ejemplo declarar una dirección

Private Structure Dir Dim nombre As String Dim calle As String Dim Ciudad As String Dim estado As String Dim codigo As Integer End Structure

Page 11: Lp Cadenas

Para declarar variables de tipo estructura se describe: [struct] dir ,info_dir,p,q

Dim info_Dir, p, q As Dir

En este caso info_dir,p y q son variables de tipo dir que es una estructura.

Si solo se necesita declarar una variable estructura, entonces no se necesita el nombre de la estructura. Ejemplo.

8.6.- REFERENCIA A LOS ELEMENTOS DE UNA ESTRUCTURA

A los elementos individuales de la estructura se hace referencia utilizando el operador. (denominado operador . ).

formato: nombre_estructura.nombre_de_elemento

Ej. gets(info_dir.nombre).- Lee el campo nombre de la estructura info_dir.

Ejemplo. En una empresa hay n trabajadores cada registro de trabajador contiene los siguientes campos

- Nombre del trabajador = 30 caracteres; - Tipo del trabajador = 1 carácter - Edad del trabajador = Número entero; - Sueldo de trabajador = Número real

Ingresar los datos de cada trabajador y listarlos después con todos los campos y agregar sueldo neto que es igual sueldo* 0.9.

}

Option Explicit OnOption Strict OnModule Module1 Private Structure Registro Dim nombre As String Dim tipo As String Dim edad As Integer Dim estado As String Dim codigo As Integer

Page 12: Lp Cadenas

Dim sueldo As Single End Structure

Sub main() Const tmax As Integer = 10 REM hasta 10 trabajadores Dim i, na As Integer Dim traba(tmax) As Registro Console.Write(" ingrese numero de trabajadores ") na = CInt(Console.ReadLine()) For i = 0 To na - 1 Console.Write(" ingrese nombre del trabajador ") traba(i).nombre = Console.ReadLine() Console.Write("Ingrese tipo(O,E,F): ") traba(i).tipo = Console.ReadLine Console.Write("ingrese edad :") traba(i).edad = CInt(Console.ReadLine()) Console.Write("Ingrese Sueldo :") traba(i).sueldo = CSng(Console.ReadLine()) Next Console.WriteLine("RESULTADOS") Console.WriteLine(" {0,20} {1,10} {2,10} {3,10} {4,10}", "NOMBRES Y APELLIDOS", "TIPO", "EDAD", "SUELDO BRUTO", "SUELDO NETO") Console.WriteLine("=======================") For i = 0 To na - 1 Console.WriteLine("{0,-20} {1,10} {2,10} {3,10:F2} {4,10:F2}", traba(i).nombre, traba(i).tipo, traba(i).edad, traba(i).sueldo, traba(i).sueldo * 0.9) Next Console.ReadLine() End SubEnd Module

8.7 ESTRUCTURAS ANIDADAS

Ejemplo de estructuras anidadas

Option Explicit OnOption Strict On

Module Module1 Private Structure Autor Dim nombre As String Dim apellido As String End Structure Private Structure tema

Page 13: Lp Cadenas

Dim modulo As String Dim area As String End Structure Private Structure libro Dim nombre_lib As String Dim aut As Autor Dim tem As tema End Structure

Sub main() Dim li As libro Console.Write("titulo del libro ") li.nombre_lib = Console.ReadLine() Console.Write("apellidos del autor ") li.aut.apellido = Console.ReadLine() Console.Write("nombre del autor ") li.aut.nombre = Console.ReadLine() Console.Write("modulo ") li.tem.modulo = Console.ReadLine() Console.Write("Area ") li.tem.area = Console.ReadLine() Console.ReadLine() End SubEnd Module

8.8 CORRIENTES Y ARCHIVOS

Los dispositivos tradicionales, terminales, unidades de disco o cinta, puertos e impresora, son tratados como archivos.

Fundamentalmente se distingue dos tipos de corrientes. Corriente de texto. Corriente binarias

Una corriente de texto es una sucesión indefinida de caracteres organizados en líneas de diversas longitudes, informáticamente hablando, en registros de longitud indefinida.

Par distinguir el principio y final de cada línea, C utiliza como "separador" el carácter de nueva línea (LF o Line Feed), ASCCI numero 10 en decimal.

Habitualmente, a este tipo de agrupación de líneas o registros (fichero o archivo) termina con el carácter decimal 26 (EOF de En Of File o fin de archivo ).

Registro 1 LF Registro 2 LF Registro 3 LF EOF

Archivo de texto con 3 registros de longitud indefinida.

Page 14: Lp Cadenas

Al tratar una corriente de texto VB realiza ciertas transformaciones de los caracteres especiales leídos / escritos. As¡ por ejemplo, un carácter puede transformarse en un par (CR y LF) según las conveniencias del sistema. Por tanto, puede haber, y de hecho hay ciertas diferencias entre los caracteres leídos de un disco y los realmente almacenados en la memoria o viceversa, cuando se trata el archivo como archivo de texto.En un corriente binaria las transformaciones mencionadas no se realizan, y el texto presente en la memoria y del disco coinciden unívocamente, carácter a carácter o byte a byte.

En un archivo es un concepto lógico que en el momento de su apertura se asocia o conecta (Se enablea del inglés enabled) a una corriente, y se disocia (dissable) de ésta en el momento del cierre del archivo.

8.9 ARCHIVOS

Un archivo es una colección de datos que con un titulo o nombre se almacena o se graba en dispositivos tales como discos, disquetes, cintas magnéticas, etc. Los datos de un archivos pueden ser leídos y utilizados por otros medios.

En VB un archivo es un concepto lógico que puede ser aplicado a cualquier cosa desde a un archivo de disco hasta un terminal. Se asocia a un flujo con un archivo especifico realizando una operación de apertura Una vez que el archivo esta abierto, la información puede ser intercambiada entre este y el programa. Todos lo flujos son iguales pero no todos los archivos lo son.

Las operaciones básicas con un archivo son:

a) Apertura del archivo del archivo empleando un nombre para identificarlo.b) Escritura de datos en el archivo.c) lectura de datos del archivo.d) Cierre del archivo.

Las otras operaciones como búsqueda, ordenación, modificación, agregar, borrar datos, etc. no son propios del archivos sino que se trabajan en memoria usando arreglos o listas enlazadas. Se recomienda no trabajar directamente en archivos.

Los datos de un archivo son simplemente bytes o caracteres almacenados uno a continuación del otro que son enumerados con 0,1,....

0 1 2 3 4 5 6 7.. Comienzo Apuntador apunta al componente 7

Es necesario abrir un archivo antes de proceder a hacer operaciones de escritura o de lectura en. Cuando se abre una archivo usualmente queda listo para acceder al componente 0, lo que suele decirse que el archivo apunta al comienzo.

Después de cada operación de escritura o de lectura el archivo apunta al componente que sigue al grupo de datos escritos o leídos: desplazamiento secuencia.

Debe tenerse presente que para cada archivo abierto el sistema siempre mantiene un puntero al componente actual o de acceso siguiente. También es posible desplazar o

Page 15: Lp Cadenas

ubicar el apuntador a un componente particular dentro del archivo, empleando funciones del movimiento del puntero: Movimiento directo.

Se debe cerrar un archivo cuando ya no se desee trabajar .

Se dispone de dos sistemas de funciones para operar un archivo:

a) Funciones de entrada y salida de alto nivel (archivos lógicos).b) Funciones de entrada y salida de bajo nivel (al modo del sistema operativo UNIX).

En el primer caso el sistema provee un área de almacenamiento intermedio (buffer) que sirve para almacenar temporalmente los datos escritos o leídos en el archivo. Este sistema permite un control mayor sobre el flujo de los datos y se facilita la conversión de los mismos .

En cambio con las funciones de bajo nivel, cuyo empleo es más simple, las operaciones de lectura y escritura se realizan directamente y el control de los datos queda a cargo del usuario.

ARCHIVOS

System.IO (Espacio de nombres)

El espacio de nombres System.IO contiene tipos que permiten leer y escribir en archivos y flujos de datos, así como tipos que proporcionan compatibilidad básica con los archivos y directorios.

System.IO, el punto de partida

Con la llegada de la tecnología .NET, el acceso al sistema de archivos, es un aspecto que ya no forma parte de un lenguaje determinado, como ocurría en las anteriores versiones de VB, sino que ha sido integrado dentro de la jerarquía de clases de la plataforma, en el espacio de nombres IO de System.

Con ello, todos los lenguajes compatibles con .NET podrán utilizar este conjunto de objetos.

Las clases incluidas en System.IO, nos van a permitir realizar labores de lectura y escritura en archivos de texto, binarios, etc., así como la creación y manipulación de los archivos y directorios que contienen la información.

Objetos Stream

Un objeto Stream representa un flujo o corriente de datos, es decir, un conjunto de información guardada en formato de texto o binario, que podremos leer y escribir sobre un soporte físico, también denominado en la plataforma .NET, almacén de respaldo (backing store).

Algunos tipos de Stream, para optimizar el flujo de transferencia de datos entre el objeto y su medio físico de almacenamiento, disponen de una característica denominada almacenamiento intermedio (buffering), que consiste en mantener un búfer

Page 16: Lp Cadenas

intermedio con los datos. En el caso, por ejemplo, de tareas de escritura, todas las operaciones se realizarían en el búfer, mientras este dispusiera de capacidad. Una vez terminado el proceso de escritura, o cuando el búfer estuviera lleno, su contenido pasaría al archivo físico. Podemos también, alterar el comportamiento por defecto del búfer a través de diversas propiedades y métodos del objeto Stream correspondiente.

Las clases TextReader y TextWriter

Estas clases contienen los miembros genéricos para realizar lectura y escritura de caracteres.

Se trata de clases abstractas, por lo que deberemos utilizar las clases derivadas StreamReader, StreamWriter, StringReader y StringWriter, comentadas a continuación.

La clase StreamWriter

Un objeto StreamWriter realiza operaciones de escritura de texto sobre un archivo.El proceso típico de escritura de datos mediante un StreamWriter, comprende los siguientes pasos: Instanciar un objeto de esta clase mediante alguno de los constructores

disponibles. Aquí creamos un nuevo archivo para escribir datos sobre él, o abrimos uno existente.

Escritura de texto mediante los métodos WriteLine( ) y Write( ). El primero escribe el texto pasado como parámetro, y añade los caracteres especiales de retorno de carro y nueva línea. El segundo escribe el texto pasado y deja el puntero de escritura a partir del último carácter escrito, con lo que no produce un cambio automático de línea. Deberemos utilizar la propiedad NewLine para introducir manualmente un salto de línea.

Cierre del Stream con el método Close( ). Esta acción vuelca el contenido del búfer del objeto en el archivo.

Algunas de las clases de tipo Stream de escritura disponen del campo compartido Null, que permite realizar una operación de escritura que no será volcada en el medio físico de almacenamiento, con lo que se perderán los datos escritos.

En el caso de que el archivo sobre el que vamos a escribir ya exista, podemos utilizar un constructor de StreamWriter que nos permite especificar si vamos a añadir texto al archivo o vamos a sobrescribir , perdiendo el texto que hubiera.

' abre el archivo y se sitúa al final del texto para añadir swEscritor = New StreamWriter("\pruebas\NOTAS.txt", True) ' se elimina el contenido previo del archivo swEscritor = New StreamWriter("\pruebas\NOTAS.txt", False)

Después de crear un objeto de este tipo, y escribir algunas líneas de texto sin cerrar el Stream, si abrimos su archivo de texto correspondiente, nos encontraremos con que no hay texto dentro del archivo. Ello es debido a que todavía no se ha volcado el contenido del búfer del objeto sobre el archivo. Para forzar dicho volcado, deberemos llamar al método Flush( ), que se encarga de traspasar el búfer al archivo asociado al Stream. Veamos el Código fuente

Page 17: Lp Cadenas

1. Escritura de un archivo

Option Explicit OnOption Strict OnImports System.IOModule Module1 Sub Main() Dim swEscritor As StreamWriter ' creamos un stream de escritura, y al mismo tiempo un ' nuevo archivo para escribir texto sobre él Dim NombreArchivo = "E:\DATOS\NOTAS.txt" swEscritor = New StreamWriter(NombreArchivo) ' escribir líneas SwEscritor..WriteLine("esta es la primera línea") swEscritor.WriteLine("segunda línea de texto") ' ahora escribimos texto pero sin provocar un salto de línea swEscritor.Write("Un pocomas de texto ") swEscritor.Write(swEscritor.NewLine) ' esto introduce el salto de línea swEscritor.WriteLine("con esta línea cerramos") ' si abrimos el archivo antes de la siguiente, estará vacío swEscritor.Flush() ' ahora el archivo ya contendrá texto ' cerrar el stream y el archivo asociado swEscritor.Close() Console.WriteLine(" archivo {0} grabado satisfactoriamente", NombreArchivo) Console.ReadLine() End SubEnd Module

Nota : modifique el programa y vera que agrega el archivo swEscritor = New StreamWriter(NombreArchivo, True) ' agrega texto

La clase StreamReader

Un objeto StreamReader realiza operaciones de lectura de texto sobre un archivo.

El proceso que debemos llevar a cabo para leer el contenido de un Stream de lectura es muy similar al de escritura: instanciar el objeto con uno de sus constructores, abriendo un archivo para leer; ejecutar alguno de los métodos de lectura del StreamReader, y cerrar el objeto con Close( ).

Page 18: Lp Cadenas

Entre los métodos de lectura de este objeto, tenemos ReadLine( ), que devuelve una línea del archivo; y ReadToEnd( ), que devuelve el resto del contenido del archivo, desde el punto en el que se encontrara el Stream al realizar la última lectura. Veamos unos ejemplos en el Código fuente

2 Lectura de un Archivo

Option Explicit OnOption Strict OnImports System.IOModule Module1 Sub main() Dim srLector As StreamReader = New StreamReader("e:\DATOS\NOTAS.txt") Dim Linea As String Dim ContadorLin As Integer = 1 Console.WriteLine("lectura de archivos") Linea = srLector.ReadLine() Do While Not (Linea Is Nothing) Console.WriteLine("Línea: {0} - Contenido: {1}", ContadorLin, Linea) ContadorLin += 1 Linea = srLector.ReadLine() Loop Console.ReadLine() End SubEnd Module

Las clases StringWriter y StringReader

Estas clases proporcionan la misma funcionalidad que StreamWriter y StreamReader, con la diferencia de que StringWriter trabaja con un objeto StringBuilder como almacén de datos, mientras que StringReader utiliza un String para leer su contenido.

8.12.1 Valores de las funciones

Las constantes EOF y NULL son iguales a -1 y 0 (cero), respectivamente, si utilizan para comprobar si estas funciones se ejecutan correctamente.

8.10 PROGRAMA EXPLICATIVO DE ARCHIVOS CON REGISTROS

Realizar las operaciones de ingresar, mostrar, grabar, recuperar datos de n alumnos

Page 19: Lp Cadenas

Option Explicit OnOption Strict OnImports System.IOModule Module1 Public Structure alumno Dim nombre As String Dim nota As Integer End Structure

Sub ingresar(ByVal estu() As alumno, ByRef n As Integer) Dim i As Integer Console.Write(" cuantos alumnos ") n = CInt(Console.ReadLine()) For i = 0 To n - 1 Console.Write("Ingrese nombre :") estu(i).nombre = Console.ReadLine() Console.Write("Ingrese nota :") estu(i).nota = CInt(Console.ReadLine()) Next End Sub

Sub mostrar(ByVal estu() As alumno, ByVal n As Integer) Console.WriteLine(" {0,-30}{1,4}", "nombre", "edad") Dim i As Integer For i = 0 To n - 1 Console.WriteLine(" {0,-30}{1,4} ", estu(i).nombre, estu(i).nota) Next End Sub

Sub grabar(ByVal estu() As alumno, ByVal n As Integer) Dim i As Integer Dim swEscritor As StreamWriter swEscritor = New StreamWriter("E:\datos\alumnos.txt") ' escribir líneas

Page 20: Lp Cadenas

For i = 0 To n - 1 swEscritor.WriteLine("{0}{1} {2}", estu(i).nombre, Chr(9), estu(i).nota) Next swEscritor.Close() Console.WriteLine(" el archivo {0} ha sido grabado ", "E:\datos\alumnos.txt") End Sub

Sub recuperar(ByVal estu() As alumno, ByRef n As Integer) Dim cadena, subcadena As String Dim srLector As StreamReader srLector = New StreamReader("E:\datos\alumnos.txt") Console.WriteLine("lectura de archivos") Dim cont As Integer = 0 Dim pos As Integer cadena = srLector.ReadLine() Do While Not (cadena Is Nothing) cadena = cadena & Chr(9) pos = InStr(1, cadena, Chr(9)) subcadena = Mid(cadena, 1, pos - 1) estu(cont).nombre = subcadena subcadena = Mid(cadena, pos + 1, Len(cadena) - pos) estu(cont).nota = CInt(subcadena) cont = cont + 1 cadena = srLector.ReadLine() Loop n = cont srLector.Close() End Sub

Sub main() Dim na As Integer = 0, opcion As Integer Dim estu(10) As alumno Do Console.Write(" 1.Ingresar 2.listar 3.Grabar 4. recuperar 5.Salir ") opcion = CInt(Console.ReadLine()) Select Case opcion Case 1 : ingresar(estu, na) Case 2 : mostrar(estu, na) Case 3 : grabar(estu, na) Case 4 : recuperar(estu, na) Case 5 End Select Loop While (opcion <> 5) Console.ReadLine() End SubEnd Module

8.11. PROBLEMAS RESUELTOS

P801 Cadenas :Ingresar una cadena y mostrarlo letra por letra

Page 21: Lp Cadenas

Option Explicit OnOption Strict OnModule Module1 Sub MAIN() Dim cadena As String = "verde" Console.Write("ingrese cadena") cadena = Console.ReadLine() For i = 0 To Len(cadena) - 1 Console.Write("{0,4}", cadena(i)) Next CONSOLE.READLINE() End SubEnd Module

Problema PC802.- En este programa lee un texto ingresado por el teclado en una variable de cadena llamada línea y luego se imprime el número de palabras que la componen.

Option Explicit OnOption Strict OnModule Module1 Sub MAIN() Dim cadena As String = "verde" Dim palabras(100) As String Console.Write("ingrese cadena") cadena = Console.ReadLine() Dim cpal As Integer = 0 Dim iniCadena = 0 For i = 0 To Len(cadena) - 1 If cadena(i) = " " Then cpal = cpal + 1 End If Next Console.Write("la cantidad de palabras es {0}", cpal) Console.ReadLine() End SubEnd Module

Problema PC803.- Ordenamiento de cadenas

Page 22: Lp Cadenas

Option Explicit OnOption Strict OnImports System.IOModule Module1 Sub Mostrar(ByVal Nombres() As String, ByVal n As Integer) Dim i As Integer For i = 0 To n - 1 Console.WriteLine(" {0}", Nombres(i)) Next End Sub

Sub OrdenarCadenas(ByVal Nombres() As String, ByVal n As Integer) Dim fila, col As Integer Dim temp As String For fila = 0 To n - 2 For col = fila + 1 To n - 1 If (Nombres(col) < Nombres(fila)) Then temp = Nombres(fila) Nombres(fila) = Nombres(col) Nombres(col) = temp End If Next Next End Sub

Sub main() Dim Nombres(100) As String Dim n, i As Integer Console.Write("ingrese nro de nombres") n = CInt(Console.ReadLine) Console.WriteLine("ingrese {0} de nombres", n) For i = 0 To n - 1 Console.Write("ingrese nombre {0} ", i) Nombres(i) = Console.ReadLine Next Console.WriteLine(" nombres ingresado") Mostrar(Nombres, n) OrdenarCadenas(Nombres, n) Console.WriteLine(" nombres Ordenados")

Page 23: Lp Cadenas

Mostrar(Nombres, n) Console.ReadLine() End SubEnd Module

Problema PC804.- Programa de estructuras de nombres de alumnos y notas.

Option Explicit OnOption Strict OnStructure ficha Dim nombre As String Dim nota As Integer Dim notas As SingleEnd Structure

Module Module1 Sub main() Const ne As Integer = 20 REM numero m ximo de alumnos Dim alumnos(ne) As ficha REM array de estructuras o registros Dim i, na As Integer Dim aprobados As Integer = 0, desapro As Integer = 0 REM entrada de datos Console.Write(" cuantos datos") na = CInt(Console.ReadLine()) console.writeline("ingrese {0} datos", na) For i = 0 To na - 1 Console.Write(" Nombre {0} ", i) alumnos(i).nombre = Console.ReadLine() Console.Write("Nota ") alumnos(i).nota = CInt(Console.ReadLine()) Next REM escribir resultados console.writeline("NOMBRE NOTA") For i = 0 To na - 1 Console.WriteLine(" {0} {1} ", alumnos(i).nombre, alumnos(i).nota) If (alumnos(i).nota >= 10.5) Then aprobados += 1 Else : desapro += 1

Page 24: Lp Cadenas

End If Next Console.WriteLine("Aprobados {0} %", aprobados / na * 100) Console.WriteLine("Desaprobados {0} %", desapro / na * 100) Console.ReadLine() End SubEnd Module

Problema PC805.-Elaborar tabla de funciones trigonométricas en grados grabarlos para exportalos a excel

Option Explicit On

Page 25: Lp Cadenas

Option Strict OnImports System.IOModule MODULE1 Function gradosRad(ByVal grados As Single) As Single gradosRad = CSng(grados * Math.PI / 180) End Function Sub Main() Dim grados As Single, rad As Single Dim contador As Integer = 1 grados = 5 Console.WriteLine(" {0,4} {1,6} {2,8} {3,8} {4,8} {5,8}", "NRO", "GRADOS", "RADIANES", "SENO", "COSENO", "TANGENTE") For grados = 0 To 360 Step 5 rad = gradosRad(grados) Console.WriteLine(" {0,4:d} {1,6:F2} {2,8:F4} {3,8:F4} {4,8:F4} {5,8:F4} ", contador, grados, rad, Math.Sin(rad), Math.Cos(rad), Math.Tan(rad)) contador += 1 Next Console.ReadLine() REM grabar los datos para exportarlos a excel Dim NombreArchivo As String = "E:\DATOS\TRIGONOTRIA.txt" Dim swEscritor As StreamWriter contador = 0 swEscritor = New StreamWriter(NombreArchivo) grados = 5 swEscritor.WriteLine(" {0,4} {1} {2,6} {3} {4,8} {5} {6,8} {7}{8,8}{9} {10,10}", "NRO", Chr(9), "GRADOS", Chr(9), "RADIANES", Chr(9), "SENO", Chr(9), "COSENO", Chr(9), "TANGENTE") For grados = 0 To 360 Step 5 rad = gradosRad(grados) swEscritor.WriteLine("{0,4:d3} {1} {2,6:f2} {3} {4,8:f4} {5} {6,8:F4} {7}{8,8:F4}{9} {10,10:F4} ", contador, Chr(9), grados, Chr(9), rad, Chr(9), Math.Sin(rad), Chr(9), Math.Cos(rad), Chr(9), Math.Tan(rad)) contador += 1 Next swEscritor.Close() Console.WriteLine(" Archivo {0} grabado satisfactoriamente", NombreArchivo) Console.ReadLine() End SubEnd Module

Problema PC806. Recupera la siguiene figura que es una casita

Page 26: Lp Cadenas

Option Explicit OnOption Strict OnImports System.IOModule MODULE1 Sub RecuperarMatriz(ByVal nombrearchivo As String, ByRef A(,) As Integer, ByVal nf As Integer, ByVal nc As Integer) Dim srLector As StreamReader srLector = New StreamReader(nombrearchivo) Dim fila As Integer, col As Integer Dim cadena As String = "" Dim subcadena As String Dim pos As Integer = 0 Dim inicio As Integer = 1 For fila = 0 To nf - 1 cadena = srLector.ReadLine() cadena = cadena & Chr(9) inicio = 1 For col = 0 To nc - 1

Page 27: Lp Cadenas

pos = InStr(inicio, cadena, Chr(9)) subcadena = Mid(cadena, inicio, pos - inicio) A(fila, col) = CInt(CSng(Val(subcadena))) inicio = pos + 1 Next Next Console.WriteLine("Archivo leido satisfactoriamente") srLector.Close() End Sub Sub MostrarMatriz(ByVal A(,) As Integer, ByVal nf As Integer, ByVal nc As Integer, ByVal cx As Integer, ByVal cy As Integer) Dim fila, col, c1 As Integer For fila = 0 To nf - 1 For col = 0 To nc - 1 If A(fila, col) <= 15 Then Console.SetCursorPosition(cx + col, cy + fila) Console.BackgroundColor = CType(A(fila, col), ConsoleColor) Console.ForegroundColor = CType(A(fila, col), ConsoleColor) Console.Write("{0}", A(fila, col)) End IfNext Next End Sub

Sub main() Const maxfilas As Integer = 50, maxcol As Integer = 50 Dim Matriz(maxfilas, maxcol) As Integer Dim nf As Integer = 23, nc As Integer = 21, cx As Integer = 10, cy As Integer = 1 RecuperarMatriz("E:\datos\casita23x21.txt", Matriz, nf, nc) MostrarMatriz(Matriz, nf, nc, cx, cy) Console.ReadLine() End SubEnd Module

Mover la casita

Sub main() Const maxfilas As Integer = 50, maxcol As Integer = 50 Dim Matriz(maxfilas, maxcol) As Integer Dim nf As Integer = 23, nc As Integer = 21, cx As Integer = 10, cy As Integer = 1

Page 28: Lp Cadenas

RecuperarMatriz("E:\datos\casita23x21.txt", Matriz, nf, nc) Dim cx2 As Integer, cy2 As Integer While CBool((1)) For cx = 1 To 78 - nc - 1 MostrarMatriz(Matriz, nf, nc, cx, cy) System.Threading.Thread.Sleep(20) Console.BackgroundColor = 0 cx2 = cx + 1 cy2 = cy Console.MoveBufferArea(cx, cy, nc, nf, cx2, cy2) Next Console.Clear() End While Console.ReadLine() End SubEnd Module

Problema PC807 Problema ejemplo de archivos de nombresSe tiene los siguente informacion

COD NOMBRE DNI SUELDOC1 JUAN 11111 100C2 CARLOS 22222 200C3 JORGE 33333 300C4 JOSE 44444 400

Option Explicit OnOption Strict OnImports System.IO

Module Module1 Sub main() REM **************** programa principal

Page 29: Lp Cadenas

Dim opcion, nreg As Integer Dim nombre As String = "E:\datos\clientes.txt" Do Console.WriteLine() Console.WriteLine(" 1: recuperar 2:listar 3.agregar 4.modificar 5.buscar que contiene nombre ") Console.WriteLine(" 6.filtrar que contiene nombre 7 .Eliminar 8.elimeinar todos 9 grabar 10.salir") Console.Write(" Ingrese opcion ") opcion = CInt(Console.ReadLine()) Select Case opcion Case 1 : RecuperarMatriz(nombre, Matriz, nf, nc) Console.WriteLine("Cantidad de registros {0} ", nf) Case 2 MostrarMatriz(Matriz, nf, nc) Console.WriteLine() Console.WriteLine("Cantidad de registros {0} ", nf) Case 3 Console.WriteLine("Cantidad de registros {0} ", nf) Agregar(Matriz, nf, nc) Case 4 Console.Write("Ingrese el registro a Modificar") nreg = CInt(Console.ReadLine()) Modificar(Matriz, nreg) Case 5 Console.Write("Ingrese Nombre a buscar") nombre = Console.ReadLine() BuscarPorNombre(Matriz, nf, nombre) Case 6 Console.Write(" Ingrese Nombre a Filtrar") nombre = Console.ReadLine() FiltrarPorNombre(Matriz, nf, nombre) Case 7 Console.Write("Ingrese el registro a Eliminar") nreg = CInt(Console.ReadLine()) Eliminar(Matriz, nreg, nf) Case 8 nf = 0 Case 9 GrabarMatriz(nombre, Matriz, nf, nc) End Select Loop While (opcion <> 10) End SubEnd Module

Modulo 2

Imports System.IOModule Module2 Const max As Integer = 10 Public Structure cliente Dim cod As String

Page 30: Lp Cadenas

Dim nombre As String Dim DNI As String Dim sueldo As Single End Structure Public Clientes(max) As cliente Public nf As Integer = 0 Public nc As Integer = 4 Public Matriz(max, max) As String Sub MostrarMatriz(ByVal A(,) As String, ByVal nf As Integer, ByVal nc As Integer) Dim fila, col As Integer Console.WriteLine("{0,5} {1,15} {2,15} {3,15} {4,15}", "REG", "COD", "NOMBRE", "DNI", "SUELDO") For fila = 0 To nf - 1 Console.Write("reg {0}", fila) For col = 0 To nc - 1 Console.Write("{0,15}", A(fila, col)) Next Console.WriteLine() Next End Sub Sub RecuperarMatriz(ByVal nombrearchivo As String, ByRef A(,) As String, ByRef nf As Integer, ByVal nc As Integer) Dim srLector As StreamReader srLector = New StreamReader(nombrearchivo) Dim fila As Integer = 0, col As Integer Dim cadena As String = "" Dim subcadena As String Dim pos As Integer = 0 Dim inicio As Integer = 1 cadena = srLector.ReadLine() Do While Not (cadena Is Nothing) cadena = cadena & Chr(9) inicio = 1 For col = 0 To nc - 1 pos = InStr(inicio, cadena, Chr(9)) subcadena = Mid(cadena, inicio, pos - inicio) A(fila, col) = subcadena inicio = pos + 1 Next fila = fila + 1 cadena = srLector.ReadLine() Loop nf = fila Console.WriteLine("Archivo leido satisfactoriamente") srLector.Close() End Sub Sub GrabarMatriz(ByVal nombrearchivo As String, ByRef A(,) As String, ByRef nf As Integer, ByVal nc As Integer) Dim srEscritor As StreamWriter srEscritor = New StreamWriter(nombrearchivo) Dim fila As Integer = 0, col As Integer For fila = 0 To nf - 1

Page 31: Lp Cadenas

For col = 0 To nc - 1 srEscritor.Write(" {0} {1} ", A(fila, col), Chr(9)) Next srEscritor.WriteLine() Next Console.WriteLine("Archivo grabado satisfactoriamente") srEscritor.Close() End Sub

Sub Agregar(ByRef A(,) As String, ByRef nf As Integer, ByVal nc As Integer) Console.Write("Ingrese codigo ") A(nf, 0) = Console.ReadLine() Console.Write(" Ingrese nombre ") A(nf, 1) = Console.ReadLine() Console.Write(" Ingrese DNI ") A(nf, 2) = Console.ReadLine() Console.Write(" Ingrese sueldo ") A(nf, 3) = Console.ReadLine() nf = nf + 1 Console.WriteLine("cantidad de registros {0} ", nf) End Sub

Sub Modificar(ByRef A(,) As String, ByVal nreg As Integer) Console.Write("Ingrese codigo ") A(nreg, 0) = Console.ReadLine() Console.Write(" Ingrese nombre ") A(nreg, 1) = Console.ReadLine() Console.Write(" Ingrese DNI ") A(nreg, 2) = Console.ReadLine() Console.Write(" Ingrese sueldo ") A(nreg, 3) = Console.ReadLine() Console.WriteLine("Registro modificado {0} ", nreg) End Sub Sub Eliminar(ByRef A(,) As String, ByVal nreg As Integer, ByRef nf As Integer) Dim i As Integer For i = nreg To nreg - 2 A(i, 0) = A(i + 1, 0) Next nf = nf - 1 Console.WriteLine("Registro eliminado {0} ", nreg) End Sub Sub BuscarPorNombre(ByVal A(,) As String, ByRef nf As Integer, ByVal nombre1 As String) Dim i, pos As Integer Dim resultado As Integer = 0 For i = 0 To nf - 1 pos = InStr(A(i, 1), nombre1) If pos > 0 Then resultado = 1 Exit For End If Next

Page 32: Lp Cadenas

If resultado = 1 Then Console.WriteLine("Codigo {0} ", A(i, 0)) Console.WriteLine("Nombre {0} ", A(i, 1)) Console.WriteLine("DNI {0} ", A(i, 2)) Console.WriteLine("Sueldo {0} ", A(i, 3)) Else Console.WriteLine("no existe {0} ", nombre1) End If End Sub Sub FiltrarPorNombre(ByVal A(,) As String, ByRef nf As Integer, ByVal nombre1 As String) Dim fila, pos As Integer Console.WriteLine("{0,5} {1,15} {2,15} {3,15} {4,15}", "REG", "COD", "NOMBRE", "DNI", "SUELDO") Dim cont As Integer = 0 For fila = 0 To nf - 1 pos = InStr(A(fila, 1), nombre1) If pos > 0 Then cont = cont + 1 Console.Write("reg {0}", fila) For col = 0 To nc - 1 Console.Write("{0,15}", A(fila, col)) Next Console.WriteLine() End If Next Console.WriteLine("Registros encontrados {0} ", cont) End SubEnd Module

Problema PC808 Recuperar cualquier archivo de texto

Option Explicit On

Page 33: Lp Cadenas

Option Strict OnImports System.IOModule MODULE1 Sub main() Dim NombreArchivo As String = "e:\datos\datos1.txt" Dim srLector As StreamReader Dim cadena As String Dim texto As String = "" Dim ContLin As Integer = 0 srLector = New StreamReader(NombreArchivo) cadena = srLector.ReadLine() Do While Not (cadena Is Nothing) ContLin += 1 texto = texto & cadena & vbCrLf cadena = srLector.ReadLine() Loop ' mostrar el contenido del texto Console.WriteLine("contenido del archivo {0} ", NombreArchivo) Console.WriteLine("Achivo tiene {0} lineas ", ContLin) Console.WriteLine("{0} ", texto) Console.ReadLine() End SubEnd Module

Problema PC809 Mover un ser en forma aleatoria

Option Explicit OnOption Strict OnModule Module1 Const maxcol As Integer = 10 Public Structure punto Dim nro As Integer Dim color As Integer Dim caracter As Integer Dim x As Single Dim y As Single End Structure

Page 34: Lp Cadenas

Dim A(maxcol) As punto Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub ImprimirSer(ByVal A() As punto, ByVal n As Integer) Dim fila As Integer For fila = 0 To n - 1 Console.BackgroundColor = CType(A(fila).color, ConsoleColor) Console.ForegroundColor = CType(A(fila).color, ConsoleColor) Console.CursorLeft = CInt(A(fila).x) Console.CursorTop = CInt(A(fila).y) Console.Write("{0}", Chr(A(fila).caracter)) Next End Sub Function distancia(ByVal x1 As Single, ByVal y1 As Single, ByVal x2 As Single, ByVal y2 As Single) As Single distancia = CSng(Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2))) End Function Sub main() Dim n As Integer = 8, colgana As Integer, filagana As Integer, fila As Integer, col As Integer Dim x1 As Single, y1 As Single, x2 As Single, y2 As Single Dim menor As Single, d As Single A(0).x = 12 : A(0).y = 10 : A(0).color = 9 : A(0).caracter = 219 A(1).x = 11 : A(1).y = 10 : A(1).color = 10 : A(1).caracter = 219 A(2).x = 10 : A(2).y = 10 : A(2).color = 12 : A(2).caracter = 219 A(3).x = 10 : A(3).y = 10 : A(3).color = 13 : A(3).caracter = 219 A(4).x = 10 : A(4).y = 10 : A(4).color = 14 : A(4).caracter = 177 A(5).x = 10 : A(5).y = 10 : A(5).color = 15 : A(5).caracter = 178 A(6).x = 10 : A(6).y = 10 : A(6).color = 11 : A(6).caracter = 177 A(7).x = 10 : A(7).y = 10 : A(7).color = 7 : A(7).caracter = 220 Call ImprimirSer(A, n) Randomize() x1 = A(0).x y1 = A(0).y While CBool((1)) x2 = Int(Rnd() * 78) + 2 y2 = Int(Rnd() * 23) + 2 menor = 1000 While menor > 1 Console.BackgroundColor = 0 Console.Clear() Console.CursorLeft = CInt(x2) Console.CursorTop = CInt(y2) Console.Write("*") For fila = CInt(y1 - 1) To CInt(y1 + 1) For col = CInt(x1 - 1) To CInt(x1 + 1) If fila = y1 And col = x1 Then Continue For Else d = distancia(col, fila, x2, y2) If (d < menor) Then menor = d filagana = fila

Page 35: Lp Cadenas

colgana = col End If End If Next Next x1 = colgana y1 = filagana ' modificamos el ser For fila = n - 1 To 1 Step -1 A(fila).x = A(fila - 1).x A(fila).y = A(fila - 1).y Next A(0).x = x1 A(0).y = y1 Call ImprimirSer(A, n) System.Threading.Thread.Sleep(20) End While x1 = x2 y1 = y2 End While Console.ReadLine() End SubEnd Module

Problema PC810 BuscadorSe tiene el siguiente diseño en excel encontrar un buscador encuentra los puntos deseados si no lo 3encuentra que la computadora muestra un mensaje de que no se encontro

3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 33 0 0 0 0 0 3 3 3 3 0 3 3 3 0 3 3 3 3 3 3 3 3 3 3 0 3 3 3 3 0 3 0 0 0 3 3 3 3 33 0 3 3 3 0 3 3 3 3 0 3 3 3 0 3 3 3 3 3 3 3 3 3 3 0 3 3 3 3 0 3 3 3 0 3 3 3 3 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 33 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 3 3 3 0 3 3 2 2 2 0 3 3 3 3 0 3 3 3 0 3 3 3 3 3

3 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 3 3 3 0 3 3 2 2 2 0 3 3 3 3 0 3 3 3 0 3 3 3 3 33 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 3 3 3 0 3 3 2 2 2 0 3 3 3 3 0 3 3 3 0 3 3 3 3 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 33 3 3 3 3 0 3 0 0 3 0 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 3 0 3 3 3 0 3 3 3 3 33 3 3 3 3 0 3 0 0 3 0 3 3 3 0 0 3 3 3 3 2 3 3 3 3 0 3 0 0 3 0 3 3 3 0 3 3 3 3 33 3 3 3 3 0 3 0 0 3 0 3 3 3 0 0 3 3 3 3 2 2 2 2 2 0 3 0 0 3 0 3 3 3 0 3 3 3 3 33 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 3 3 3 3 2 3 3 3 3 0 3 3 3 3 0 3 3 3 0 3 2 3 3 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 33 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 3 3 3 0 0 0 0 0 0 0 3 3 3 3 0 3 3 3 0 3 3 3 3 33 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 3 3 3 0 0 0 0 0 0 0 3 3 3 3 0 3 3 3 0 3 3 3 3 33 3 3 3 3 3 3 3 3 3 0 3 3 3 3 0 3 3 3 0 0 0 0 0 0 0 3 3 3 3 0 0 0 0 0 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 3 3 3 0 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

Page 36: Lp Cadenas

Imports System.IOModule module2 '/*** declaraciones Public Const maxfilas As Integer = 20, maxcol As Integer = 40 Public Matriz(maxfilas, maxcol) As Integer Public Cx As Integer = 1, Cy As Integer = 1 Public dir As Integer = 0, valor As Integer = 0 Public final As Integer = 0, cont As Integer = 0 Public nfilasPantalla = 22, NcolPantalla = 40 Public srLector As StreamReader Public nf As Integer Public nc As Integer Public Objetos(maxfilas * maxcol) Public Sub RecuperarArchivo(ByVal A(,) As Integer, ByVal nf As Integer, ByVal nc As Integer) srLector = New StreamReader("e:\DATOS\lab40x20.txt") Dim cadena As String Dim subcadena As String Dim pos As Integer = 0 Dim longitud As String Dim inicio As Integer = 1 Dim cont As Integer = 0 For fila = 0 To nf - 1 cadena = srLector.ReadLine() longitud = Len(cadena) inicio = 1 cont = 0 Do pos = InStr(inicio, cadena, Chr(9)) If pos > 0 Then subcadena = Mid(cadena, inicio, pos - inicio)

Page 37: Lp Cadenas

A(fila, cont) = Val(subcadena) inicio = pos + 1 cont += 1 Else subcadena = Mid(cadena, inicio, longitud - inicio + 1) A(fila, cont) = Val(subcadena) cont += 1 Exit Do End If Loop While (inicio <= longitud) Next Console.WriteLine("Archivo leido satisfactoriamente") srLector.Close() End Sub Sub InicializarObjeto(ByRef Objeto1 As Buscador) Objeto1.Cx = 14 Objeto1.Cy = 13 Objeto1.Valor = 1 Objeto1.dir1 = 0 Objeto1.dir2 = 0 Objeto1.dir3 = 0 Objeto1.dir4 = 0 Objeto1.np = 0 Objeto1.nro = 0 End Sub Function obtenerDir(ByVal d1 As Integer, ByVal d2 As Integer, ByVal d3 As Integer, ByVal d4 As Integer) As Integer If d1 = 1 Then obtenerDir = 1 : Exit Function If d2 = 1 Then obtenerDir = 2 : Exit Function If d3 = 1 Then obtenerDir = 3 : Exit Function If d4 = 1 Then obtenerDir = 4 : Exit Function obtenerDir = 0 End Function Function evaluar(ByRef objeto1 As Buscador, ByVal Matriz(,) As Integer, ByVal camino As Integer, ByVal meta As Integer) As Integer Dim cont As Integer = 0, Cx As Integer, Cy As Integer, Direc As Integer = 0, i As Integer Dim resultado As Integer = 0 objeto1.dir1 = 0 objeto1.dir2 = 0 objeto1.dir3 = 0 objeto1.dir4 = 0 Cx = objeto1.Cx Cy = objeto1.Cy '// primero evalua si ya encontro la metas If Matriz(Cy, Cx + 1) = meta Then objeto1.dir1 = 1 cont = cont + 1 evaluar = 1 Exit Function End If If Matriz(Cy - 1, Cx) = meta Then

Page 38: Lp Cadenas

objeto1.dir2 = 1 cont = cont + 1 evaluar = 1 Exit Function End If If Matriz(Cy, Cx - 1) = meta Then objeto1.dir3 = 1 cont = cont + 1 evaluar = 1 Exit Function End If If Matriz(Cy + 1, Cx) = meta Then objeto1.dir4 = 1 cont = cont + 1 evaluar = 1 Exit Function End If '// si no encuentra meta evalua si hay camino If Matriz(Cy, Cx + 1) = camino Then objeto1.dir1 = 1 cont = cont + 1 End If If Matriz(Cy - 1, Cx) = camino Then objeto1.dir2 = 1 cont = cont + 1 End If If Matriz(Cy, Cx - 1) = camino Then objeto1.dir3 = 1 cont = cont + 1 End If If Matriz(Cy + 1, Cx) = camino Then objeto1.dir4 = 1 cont = cont + 1 End If objeto1.np = cont Direc = obtenerDir(objeto1.dir1, objeto1.dir2, objeto1.dir3, objeto1.dir4) objeto1.Direc = Direc evaluar = 0 End FunctionEnd Module

MODULO1

Imports SystemModule Module1 Public Structure Buscador Public nro As Integer Public dir1 As Integer, dir2 As Integer, dir3 As Integer, dir4 As Integer ' declarar matrices de 4 Public Cx As Integer Public Cy As Integer Public np As Integer

Page 39: Lp Cadenas

Public Valor As Integer Public Direc As Integer End Structure

Dim fila As Integer Dim col As Integer Dim nf As Integer Dim nc As Integer Public Objeto1 As Buscador Sub MostrarMatriz(ByVal cx As Integer, ByVal cy As Integer, ByVal A(,) As Integer, ByVal nf As Integer, ByVal nc As Integer) Dim fila, col As Integer For fila = 0 To nf - 1 For col = 0 To nc - 1 Console.SetCursorPosition(cx + col, cy + fila) Console.ForegroundColor = A(fila, col) Console.BackgroundColor = A(fila, col) Console.Write("{0}", A(fila, col)) Next Next End Sub

Sub MostrarObjeto(ByVal Objeto1 As Buscador, ByVal Cx As Integer, ByVal Cy As Integer) Console.ForegroundColor = Objeto1.Valor Console.SetCursorPosition(Cx + Objeto1.Cx, Cy + Objeto1.Cy) Console.Write("{0}", Objeto1.valor) End Sub

Sub main() nf = 20 nc = 40 Objeto1 = New Buscador InicializarObjeto(Objeto1) Dim Px2 As Integer = 0, Py2 As Integer = 0, valorbuscado As Integer = 2, huella As Integer = 4 Dim camino As Integer = 0, terminado As Integer = 0, retorno As Integer = 5 Dim meta As Integer = 9, resultado As Integer = 0, dir As Integer = 0 Dim valor As Integer = 0, final As Integer = 0, cont As Integer = 0, NroObjeto As Integer = 0 InicializarObjeto(Objeto1) RecuperarArchivo(Matriz, nf, nc) final = 0 Matriz(5, 7) = 9 ' para probar la metas MostrarMatriz(Cx, Cy, Matriz, nf, nc) MostrarObjeto(Objeto1, Cx, Cy) NroObjeto = 0 Objetos(NroObjeto) = Objeto1 Matriz(Objeto1.Cy, Objeto1.Cx) = huella Do Do MostrarMatriz(Cx, Cy, Matriz, nf, nc)

Page 40: Lp Cadenas

MostrarObjeto(Objeto1, Cx, Cy) resultado = evaluar(Objeto1, Matriz, camino, meta) If resultado = 1 Then GoTo fin dir = Objeto1.Direc Select Case dir Case 1 : Objeto1.Cx = Objeto1.Cx + 1 Case 2 : Objeto1.Cy = Objeto1.Cy - 1 Case 3 : Objeto1.Cx = Objeto1.Cx - 1 Case 4 : Objeto1.Cy = Objeto1.Cy + 1 Case Else : terminado = 1 End Select Matriz(Objeto1.Cy, Objeto1.Cx) = huella NroObjeto = NroObjeto + 1 cont = cont + 1 Objeto1.nro = NroObjeto Objetos(NroObjeto) = Objeto1 Loop While terminado = 0 terminado = 0 Do Objeto1 = Objetos(NroObjeto) MostrarMatriz(Cx, Cy, Matriz, nf, nc) MostrarObjeto(Objeto1, Cx, Cy) resultado = evaluar(Objeto1, Matriz, camino, meta) dir = Objeto1.Direc If (NroObjeto < 0) Then GoTo fin If dir > 0 Then terminado = 1 Else Matriz(Objeto1.Cy, Objeto1.Cx) = retorno NroObjeto = NroObjeto - 1 If (NroObjeto < 0) Then GoTo fin cont = cont + 1 System.Threading.Thread.Sleep(10) End If Loop While terminado = 0 If NroObjeto < 0 Then final = 1 Loop While final = 0 MostrarObjeto(Objeto1, Cx, Cy)fin: If NroObjeto > 0 Then MsgBox(" X= " & Objetos(NroObjeto).cx & " Y = " & Objetos(NroObjeto).cy & " Mov =" & cont) Else MsgBox(" no se encontro la meta y se hizo " & cont & " Movimientos ") End If End SubEnd Module

Problema PC811 Rellenar una figura usando autómatas celulares

Antes del relleno

Page 41: Lp Cadenas

Despues del relleno

Imports System.IOModule Module1 Sub main() Dim nf As Integer = 20, nc As Integer = 40, i As Integer Dim valor As Integer = 2 Dim fila, camino, col, px, py, pu As Integer RecuperarMatriz("E:\datos\matriz40x20.txt", A, nf, nc) A(4, 5) = valor A(5, 22) = valor MostrarMatriz(Cx, Cy, A, nf, nc) camino = 0 px = 0 py = 0 cont = 0 pu = 0 For fila = 0 To nf - 1

Page 42: Lp Cadenas

For col = 0 To nc - 1 If (A(fila, col) = valor) Then px = col py = fila pu = 1 Exit For End If Next If (pu = 1) Then Exit For Next If (pu > 0) Then contar(px, py, valor, camino) MostrarMatriz(Cx, Cy, A, nf, nc) Else Console.WriteLine(" NO EXISTE SIMILLA ") End If Console.ReadLine() End SubEnd Module

Modulo 2

Imports System.IOModule module2 Public Const maxfilas As Integer = 20, maxcol As Integer = 40 Public A(maxfilas, maxcol) As Integer Public Cx As Integer = 10, Cy As Integer = 1, cont As Integer = 0 Sub contar(ByVal Px As Integer, ByVal Py As Integer, ByVal Valor As Integer, ByVal Camino As Integer) Console.SetCursorPosition(Cx + Px, Cy + Py) Console.ForegroundColor = Valor Console.WriteLine("{0}", Valor) System.Threading.Thread.Sleep(10) A(PY, PX) = Valor cont += 1 If (A(PY, PX + 1) = Camino) Then contar(PX + 1, PY, Valor, Camino) End If If (A(PY - 1, PX) = Camino) Then contar(PX, PY - 1, Valor, Camino) If (A(PY, PX - 1) = Camino) Then contar(PX - 1, PY, Valor, Camino) If (A(PY + 1, PX) = Camino) Then contar(PX, PY + 1, Valor, Camino) End Sub Sub MostrarMatriz(ByVal cx As Integer, ByVal cy As Integer, ByVal A(,) As Integer, ByVal nf As Integer, ByVal nc As Integer) Dim fila, col As Integer For fila = 0 To nf - 1 For col = 0 To nc - 1 Console.SetCursorPosition(cx + col, cy + fila) Console.ForegroundColor = A(fila, col)

Console.Write("{0}", Hex(A(fila, col))) Next

Page 43: Lp Cadenas

Next End Sub

Sub RecuperarMatriz(ByVal nombrearchivo As String, ByRef A(,) As Integer, ByVal nf As Integer, ByVal nc As Integer) Dim srLector As StreamReader srLector = New StreamReader(nombrearchivo) Dim fila As Integer, col As Integer Dim cadena As String = "" Dim subcadena As String Dim pos As Integer = 0 Dim inicio As Integer = 1 For fila = 0 To nf - 1 cadena = srLector.ReadLine() cadena = cadena & Chr(9) inicio = 1 For col = 0 To nc - 1 pos = InStr(inicio, cadena, Chr(9)) subcadena = Mid(cadena, inicio, pos - inicio) A(fila, col) = CInt(CSng(Val(subcadena))) inicio = pos + 1 Next Next Console.WriteLine("Archivo leido satisfactoriamente") srLector.Close() End SubEnd Module

Problema PC812 Se ingresa dos numeros separados por comas (conversión de cadenas)

Module Module1 Dim cadena As String Dim x1 As Single Dim y1 As Single Dim pos As Integer Sub Main() Console.Write("ingrese x1,y1 ") cadena = Console.ReadLine pos = InStr(cadena, ",") x1 = Mid(cadena, 1, pos - 1) y1 = Mid(cadena, pos + 1, Len(cadena)) Console.Write(" x= {0} y ={1}", x1, y1) Console.CursorLeft = x1 Console.CursorTop = y1 Console.Write("*") Console.ReadLine() End SubEnd Module

Nota: se puede separar también con espacio en blanco con pos = InStr(cadena, " ")

Page 44: Lp Cadenas

8.16 PROBLEMAS PROPUESTOS.-

1. Elaborar un programa para convertir números a letras Ej. 2345 el programa debe visualizar dos mil trescientos cuarenta cinco.

2. Codificar y decodificar un mensaje3. Convertir un número a binario y a hexadecimal usando cadenas4. Evaluar expresiones Ejemplo si se ingresa la cadena x= 3+4*2 entonces x debe ser

igual 11.5. Evaluar la integral de una función ingresada por el teclado.6. Se ingresa texto por el teclado listar la frecuencia de las palabras que hay en el

texto.7. Se tiene un arreglo de registros que tiene los siguientes campos: Nombre = 30 caracteres Edad = 2 dígitos Sexo 1 varón 0 mujer Procedencia 30 caracteres Nota final = 2 dígitosElaborar un programa que elabore y visualice lo siguiente: a) Ordenar los registros en orden alfabético b) Ordenar los registros de acuerdo a la nota c) Clasificar los registros de acuerdo a su procedencia.8. Grabar un gráfico en disco u un sector de la pantalla gráfica.9. Imprimir un gráfico, en forma horizontal o vertical.10. Se tiene un vector con las frecuencias de las notas musicales grabar , recuperar y

tocar esas notas.11. Hacer un mapa donde los puntos que se necesitan para graficar el mapa de

guardan en un archivo de números que se recuperan en un vector.12. Elaborar un programa gestor de base de datos usando lista enlazadas que tenga

las siguientes opcionesa)agregar registros b) Listar c) Limpiar_Memoria d) Ordenar e) Grabar f) Recuperar g) Borrar h) Imprimir i Salir 13.Elaborar un programa para Gestionar registros con Listas Enlazadas dobles.14. Modifique el ejemplo 2 de la página 211 que elabore un menú con botón de

comandos para realizar las 4 operaciones15. Inserte una imagen a su formulario 16 Juego .- Usando punteros y escritura directa en pantalla elabore un juego con las siguientes característicasa) Cargar una matriz de 200 filas y 160 columnas y diseñar un entramado del espacio

(dibujo de naves, estrellas, etc)b) Traspasar un segmento de la matriz a la pantalla de la computadora y mover con la

teclas direccionales como se muestra en el ejercicioc) Usando la barra espaciadora, se puede disparar a las navesd) Si se llega al renglón 1 de la matriz es la metae) Si se choca con una nave si termina el juego,f) El programa debe llevar la cuenta de naves derribadas y la cantidad de proyectiles

usadas

Page 45: Lp Cadenas

Module Module1 Sub Main() Dim cadena As String = "Aguilar/Titi, Gina Ruth"

Dim posbarra, poscoma As Integer Dim APaterno, Amaterno, Nombres As String posbarra = InStr(cadena, "/") poscoma = InStr(cadena, ",") APaterno = Mid(cadena, 1, posbarra - 1) Amaterno = Mid(cadena, posbarra + 1, poscoma - posbarra - 1) Nombres = Mid(cadena, poscoma + 1, Len(cadena) - poscoma - 1)

Console.WriteLine("la cadena es {0} ", cadena) Console.WriteLine("Apellido Paterno {0} ", APaterno) Console.WriteLine("ApellidoMaterno {0} ", Amaterno) Console.WriteLine("Nombres {0} ", Nombres) Console.ReadLine() End Sub

End Module

Module Module1 Function Separador(cadena As String) As String

Dim posbarra, poscoma As Integer Dim APaterno, Amaterno, Nombres As String posbarra = InStr(cadena, "/") poscoma = InStr(cadena, ",") APaterno = Mid(cadena, 1, posbarra - 1) Amaterno = Mid(cadena, posbarra + 1, poscoma - posbarra - 1) Nombres = Mid(cadena, poscoma + 1, Len(cadena) - poscoma - 1) Console.WriteLine("Apellido Paterno {0} ", APaterno)

Page 46: Lp Cadenas

Console.WriteLine("ApellidoMaterno {0} ", Amaterno) Console.WriteLine("Nombres {0} ", Nombres) Separador = APaterno & Chr(9) & Amaterno & Chr(9) & Nombres End Function Sub Main() Dim cadena As String = "Aguilar/Titi, Gina Ruth" Console.WriteLine("la cadena es {0} ", cadena) Console.WriteLine("la cadena Convertida es {0} ", Separador(cadena)) Console.ReadLine() End Sub

End Module

Private Sub btnAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAbrir.Click cadena = "" cadena2 = "" Dim Nombrearchivo As String Dim Lector As StreamReader Dim Linea As String Dim Linea2 As String OpenFileDialog1.ShowDialog() Nombrearchivo = OpenFileDialog1.FileName

Page 47: Lp Cadenas

Lector = New StreamReader(Nombrearchivo) Linea = Lector.ReadLine() Linea2 = Separador(Linea) Do While Not (Linea Is Nothing) cadena = cadena & vbCrLf & Linea cadena2 = cadena2 & vbCrLf & Linea2 Linea = Lector.ReadLine() If Linea Is Nothing Then Exit Do End If Linea2 = Separador(Linea) Loop TextBox1.Text = cadena TextBox2.Text = cadena2 Lector.Close() End Sub

ARCHIVOS DE TEXTOCree caracteres en Excel y de aceurdo a eso mueva un mensaje

Module Module1 Sub Main() Dim x1, x2 As Integer Dim ancho, col As Integer Dim cadena As String = "AREQUIPA, 17 DE MAYO DEL 2010" Dim CadenaBusca As String Dim ASCII, indice As Integer 'Console.WriteLine("Ingrese o cadena o lea archivo de texto ") 'cadena = Console.ReadLine() Dim NombreArchivo As String = "E:\datos1\letras590x10.txt" RecuperarMatriz(NombreArchivo, A, nf, nc)

Page 48: Lp Cadenas

' MostrarMatriz(Cx, Cy, A, nc, nf) NroLetras = Len(cadena) cont = 0 For col = 0 To NroLetras - 1 CadenaBusca = cadena(col) ASCII = Asc(CadenaBusca) indice = ASCII - 32 Cx1 = separa * indice CopiarMatrices(A, B, Cx1, Cy1, nc1, nf1) 'MostrarMatriz(B, Cx2, Cy2, nc1, nf1) ImprimirMatriz(B, MA, cont * separa, Cy1, nc1, nf1) cont = cont + 1 Next Console.Clear() Console.ForegroundColor = 14

CopiarMatrices(MA, MB, 0, 0, NroLetras * 10, nf2) MostrarMatriz(MB, Cx3, Cy3, nc2, nf2) Console.ReadLine() ancho = 70 x2 = NroLetras * 10 While (1) If x1 < x2 Then x1 = x1 + 1 Else x1 = 1 End If BorrarMatriz(MB, 1, Cy3, ancho, nf2) CopiarMatrices(MA, MB, x1, 0, ancho, nf2) MostrarMatriz(MB, 1, Cy3, ancho, nf2) System.Threading.Thread.Sleep(10) ' 1 milisegundo End While Console.ReadLine() End Sub

End Module

Option Explicit OnREM Option Strict OnImports System.IOModule Module2 Public NroLetras As Integer = 0 Public Const maxfilas As Integer = 10, maxcol As Integer = 590 Public Const maxfilas1 As Integer = 10, maxcol1 As Integer = 80 Public nf As Integer = 10, nc As Integer = 590

Page 49: Lp Cadenas

Public nf1 As Integer = 10, nc1 As Integer = 10 Public nf2 As Integer = 10, nc2 As Integer = 70 Public Cx1 As Integer = 0, Cy1 As Integer = 0 ' lugar de donde se va a copiar Public Cx2 As Integer = 60, Cy2 As Integer = 1 ' lugar a pegar en la matriz A Public Cx3 As Integer = 1, Cy3 As Integer = 1 ' lugar a mostrar la matriz B Public separa As Integer = 10 Public A(maxfilas, maxcol) As String Public B(maxfilas1, maxcol1) As String Public MA(maxfilas, maxcol) As String Public MB(maxfilas, maxcol) As String Public cont As Integer = 0

Sub ImprimirMatriz(B(,) As String, ByRef M(,) As String, Cx1 As Integer, Cy1 As Integer, ancho As Integer, alto As Integer) Dim fila, col As Integer For fila = 0 To alto - 1 For col = 0 To ancho - 1 M(Cy1 + fila, Cx1 + col) = B(fila, col) Next Next End Sub Sub CopiarMatrices(A(,) As String, ByRef B(,) As String, Cx As Integer, Cy As Integer, Ancho As Integer, alto As Integer) Dim fila, col As Integer For fila = 0 To alto - 1 For col = 0 To Ancho - 1 B(fila, col) = A(Cy + fila, Cx + col) Next Next End Sub Sub RecuperarMatriz(ByVal nombrearchivo As String, ByRef A(,) As String, ByRef nf As Integer, ByVal nc As Integer) Dim srLector As StreamReader srLector = New StreamReader(nombrearchivo) Dim fila As Integer = 0, col As Integer Dim cadena As String = "" Dim subcadena As String Dim pos As Integer = 0 Dim inicio As Integer = 1 cadena = srLector.ReadLine() Do While Not (cadena Is Nothing) cadena = cadena & Chr(9) inicio = 1 For col = 0 To nc - 1

Page 50: Lp Cadenas

pos = InStr(inicio, cadena, Chr(9)) subcadena = Mid(cadena, inicio, pos - inicio) A(fila, col) = subcadena inicio = pos + 1 Next fila = fila + 1 cadena = srLector.ReadLine() Loop nf = fila Console.WriteLine("Archivo {0} leido satisfactoriamente", nombrearchivo) srLector.Close() End Sub Sub MostrarMatriz(ByRef A(,) As String, Cx As Integer, Cy As Integer, nc As Integer, ByVal nf As Integer) For fila = 0 To nf - 1 For col = 0 To nc - 1 If A(fila, col) = 1 Then Console.SetCursorPosition(Cx + col, Cy + fila) Console.Write("*") End If Next Next End Sub

Sub BorrarMatriz(ByRef A(,) As String, Cx As Integer, Cy As Integer, nc As Integer, ByVal nf As Integer) Console.BackgroundColor = 0 For fila = 0 To nf - 1 For col = 0 To nc - 1 Console.SetCursorPosition(Cx + col, Cy + fila) Console.Write(" ") Next Next End SubEnd Module