Contando letras con MatLab

Despues de un rato sin novedades, vengo con otro tuto para MatLab, esta ves veremos como contar las letras que hay en un archivo txt o directo del teclado y generar un reporte, para esto usaremos funciones nuevas y explicare un poco de control de flujo con switch e if y ciclos con un for.

Empezemos viendo la estructura de un switch:

switch variable
case 1
comandos del case 1
case 2
comandos del case 2
end

Donde “variable” es la variable a evaluar, “variable” puede ser un entero o una cadena, en el caso de trabajar con cadenas se deben poner entre comillia simple la expresion, por ejemplo case ‘hola’; acontinuacion de cada “case” van los comandos a ejecutar y para finalizar se utiliza “end”.

Estructura de un if:

if y== z
comandos a ejecutar si es verdadero
else
comandos a ejecutar si es falso
end

Donde “y” es la variable a comparar, en este caso se compara si “y” es igual a “z”, de ser verdadero se ejecutaran los comandos del bloque antes del “else” en caso contrario se ejecutaran los comandos despues del “else”, para finalizar se utiliza “end”.

Estructura de un ciclo for:

for x=1:z
comandos a ejecutar
end

Donde “x” se inicializa con 1 y por default va aumentando de 1 en 1 hasta “z”, para cambiar el paso podemos usar la expresion x=1:p:z donde “p” sera el paso que dara entre cada ciclo, puede dar paso enteros o decimales.

Ahora que ya sabemos algo de ciclos y condicionales veremos como escribir dentro de un archivo de texto, para leer un archivo de texto primero debemos abrir el archivo (fopen), despues leemos el contenido (fscanf) y por ultimo lo cerramos (fclose), para leer se hace con las siguientes instrucciones:

id= fopen(Archivo,permiso)
texto=fscanf(id,’%c’);
fclose(id)

Donde “id” sera el identificador del archivo abierto, a la funcion “fopen” se le pasan como parametros el nombre del archivo a abrir “Archivo” y el permiso de abertura, puede abrirse como lectura o escritura “permiso” debe ser una cadena; “texto” sera la varibable donde se guardaran los datos leidos por la funcion “fscanf”, esta lleva como parametros el identificador “id” del archivo y el formato con el que leera en este caso %c que leera caracter por caracter; y por ultimo se utiliza la funcion “fclose” con parametros “id”, es importante cerrar el archivo para que este disponible para otras tareas.

en construccion…..
[code language=’text’]
clc
clear

%% Valores iniciales
extension= ‘.txt’;
acontar=input(‘Que caracteres deseas buscar (seguidas sin espacios)’,’s’);

%% Eleccion del modo de trabajo
disp(‘Elige la opcion que deseas:’);
disp(‘ (c) Cargar desde un txt’);
disp(‘ (e) Introducir desde teclado’);
opt=input(”,’s’);

%% Carga del texto
switch opt
case ‘c’
file=input(‘Cual es el nombre del archivo(sin ext.): ‘,’s’);
id=fopen([file extension],’rt’);
if id==-1
disp(‘Error en la carga de archivo, compruebe que el archivo existe…’)
break
end
texto=fscanf(id,’%c’);
fclose(id);
case ‘e’
texto=input(‘Introduce el texto deseado: ‘,’s’);
end

%% Funcion de conteo
for i=1: length(acontar)
conteo(i)=length(find(texto==acontar(i)));
end

%% Se guarda un reporte
id=fopen(‘reporte.txt’,’wt’);
fprintf(id,’tReporte de letras encontradasnn’);
for i=1: length(acontar)
cadena=[‘Se encontraron ‘ int2str(conteo(i)) ‘ caracteres ‘ acontar(i)];
fprintf(id,’%sn’,cadena);
end
fclose(id);

disp(‘Operacion realizada con exito’);
open reporte.txt;
[/code]

Adrian MB

Me gusta la electrónica, programación y todo lo relacionado. Ing. en Mecatronica de la UPIITA del IPN y estudiante de Diseño Industrial en la UAM. @adrianmtzb http://adrianmb.mx

También te podría gustar...

  • Eddy

    Ahí dejo el aporte por si alguien lo necesita:

    Para guardar el archivo .txt de la clasificación que realizo use ” > nombre_archivo.txt”

    !java -classpath weka.jar weka.classifiers.meta.Decorate -W weka.classifiers.trees.LADTree -t Htraining.csv -T Histogramas3.csv > detect.txt

    luego, para lanzar el archivo, lo hice con “winopen(‘nombre_archivo.txt’);”

    winopen(‘detect.txt’);

    saludos,cualquier duda pueden escribirme mi email: eddsacx@gmail.com

    • Que bueno que te haya sido de ayuda, suerte en tu proyecto. 😛

    • Andres

      uuuuuuuuuuffffff, muchas gracias por este aporte
      necesitaba el codigo para abrir un archivo txt desde una gui. de verdad, GRACIAS!!!

  • Eddy

    Hola Adrianmb,

    claro que me es de ayuda tu comentario..
    Lo que estoy construyendo es un “clasificador”..

    Saludos

  • Eddy

    Hola Adrianmb:
    Mira, tengo guardado un archivo .txt, ahora, lo que deseo es que lo que contiene ese archivo
    1.- aparezca en dentro de un “Edit Text”, si eso no se puede entonces
    2.- espero que al hacer “click” sobre un se habra un editor de texto para poder ver la información de dicho archivo

    Espero quieres respóndeme a mi email sino aqui en tu foro, talves alla otra persona con el mismo problema y le sirva tu aportación.. Gracias
    ———-
    Estoy trabajando con la GUI de Matlab.

    —--Comentario editado—-

    • Hola Eddy, para lograr lo que necesitas, tienes que:

      1.- Puedes leer el .txt con las funciones que se explicaron en este post, el texto lo guardas en una variable y luego la mandas al editText con la función set() mandando como parametro la propiedad que corresponde al texto del editText

      2.- No recuerdo muy bien, pero en matlab se puede usar el comando “open” para abrir archivos externos, busca mas información de este comando en el help.

      Por la estructura del texto que tienes supongo que piensas hacer un parseador o algo parecido. Espero que te sea de ayuda la info

  • Roger

    Hola que tal, Adrianmb la verdad creo que esta mal mi comentario aqui, pero en fin es para que te des cuenta, ya habia hablado que yo soy de voca 7 y quiero entrar a la upiita, y esta muy interesate tu pagina, pero creo que llamaria mas la atension si dieras notas o postearas cosas sobre como es alla y tutoriales, que a proximas generaciones que (esperemos lograr ingresar, jeje), nos dieramos la idea de como entrar y así para hacer buen papel, espero que lo tomes en cuenta, has hecho un buen trabajo al igual que Richard (upiitans), y saludos…..