Dev - C++ - Ensamblador - necesito saber si mi primer campo es un tabulador

 
Vista:
sin imagen de perfil

Ensamblador - necesito saber si mi primer campo es un tabulador

Publicado por Miguel Ayala (2 intervenciones) el 08/06/2016 21:04:17
Hola compañeros tengo una duda espero me puedan ayudar,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TAB "\t"
 
int main() {
 
	FILE *archivo1=NULL; // apuntador archivo fuente
	FILE *archivo2=NULL; // apuntador mnemonicos
	FILE *archivo3=NULL; // apuntador tabla ASCII
	FILE *archivo4=NULL; // apuntador tabla simbolos
 
	int lin=0;
	int con=0;
	int ver=0;
	char comp;
	char eti[10];
	char mne1[6];
	char mne2[6];
	char val[20];
	char oc[2];
 
	printf("Ensamblador de dos pasos \n");
 
	archivo2 = fopen("Mnemonicos.txt","r");
 
	while(archivo2 == NULL){
		printf("El archivo no pudo abrirse");
		printf("\n\nNombre de archivo: programa.txt");
	}
 
	archivo1 = fopen("programa.txt","r");
 
	while(archivo1 == NULL){
		printf("El archivo no pudo abrirse");
		printf("\nNombre de archivo: programa.txt");
	}
 
	archivo4 = fopen("tabsym.txt","w+");
 
 
	if(archivo1!=NULL){
		while(!feof(archivo1)){
 
			if(archivo1==TAB){
				printf("Entro1\n");
				eti[0]='\t';
				fscanf(archivo1,"%s\t%s\t%s\n",&eti,&mne1,&val);
				printf("%s\t%s\t%s\n",eti,mne1,val);
			}
 
			else{
				printf("Entro2\n");
				fscanf(archivo1,"%s\t%s\t%s\n",&eti, &mne1, &val);
				printf("%s,%s,%s\n",eti,mne1,val);
 
				if(archivo2!=NULL){
					while(!feof(archivo2) && ver!=0){
						fscanf(archivo2,"%s\t%s\n",&mne2, &oc);
 
						if(strcmp(mne1, mne2)==0){
							ver=0;
						}
						else{
							ver=1;
						}
					}
 
					if(ver!=0){
						printf("Tu mnemonico no existe");
					}
					else
						printf("Si existe el mnemonico en linea %d\n",lin);
				}
			}
 
			fprintf (archivo4,"%x\t%s\t%s\t%s\n",con,eti,mne1,val);
			printf ("%x\t%s\t%s\t%s\n",con,eti,mne1,val);
 
			con=con+3;
			lin=lin+1;
		}
	}
 
	printf("Listo\n");
	fclose(archivo1);
	fclose(archivo2);
	fclose(archivo4);
	system("pause");
}

Estoy desarrollando un ensamblador de dos pasos para mi escuela solo que tengo un problema, al leer los datos de mi archivo1 necesito saber si mi primer campo es un tabulador y tratarlo de forma distinta que si fuera una letra o un numero, mi codigo ya me genera el archivo y lo demas pero esa pequeña parte es donde tengo problemas ya que no encuentro la forma de saber si el valor que esta apuntando el apuntador es una tabulacion, ayudaaaaaaaa!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ensamblador - necesito saber si mi primer campo es un tabulador

Publicado por Capitan Kirk (48 intervenciones) el 09/06/2016 08:50:04
Prueba con la función isspace(), esta función devuelve TRUE si el carácter está entre los que pueden considerarse como espacio en blanco (blancos, tabuladores, y algún otro).

Creo que tendrás que #incluir <ctype.h>, en este momento no estoy seguro.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ensamblador - necesito saber si mi primer campo es un tabulador

Publicado por Miguel Ayala (2 intervenciones) el 10/06/2016 03:04:20
Gracias pero no me sirvio :(

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
while(!feof(archivo1)){
 
	comi=(ftell(archivo1));
 
	if(isspace(fgetc(archivo1))!=0){
		fseek(archivo1,comi,0);
		printf("Entro1\n");
		eti[0]='\t';
		fscanf(archivo1,"\t%s\t%s\n",&mne1,&val);
		printf("\t%s\t%s\n",mne1,val);
	}
 
	else{
		fseek(archivo1,comi,0);
		printf("Entro2\n");
		fscanf(archivo1,"%s\t%s\t%s\n",&eti, &mne1, &val);
		printf("%s,%s,%s\n",eti,mne1,val);
 
		if(archivo2!=NULL){
			while(!feof(archivo2) && ver!=0){
				fscanf(archivo2,"%s\t%s\n",&mne2, &oc);
 
				if(strcmp(mne1, mne2)==0){
					ver=0;
				}

Lo estoy implementado asi pero no me lee el caracter del tabulador :'( no se q hacer ayudaaaaaaa!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ensamblador - necesito saber si mi primer campo es un tabulador

Publicado por Capitan Kirk (48 intervenciones) el 10/06/2016 14:29:06
1. El carácter del tabulador no lo puedes definir como tú lo has hecho. Tal como lo has hecho, TAB es la cadena "\t", que no se corresponderá con el carácter de tabulador. El código ASCII para el tabulador es (creo) el 9. \t es un especificador de formato, válido solamente para aquellas funciones en que se especifica un formato para texto.

2. Puede que te convenga leer la línea entera, con fgets. Una vez leída, puedes comprobar si comienza con un tabulador. Puedes extraer los distintos campos con sscanf.

3. Las cadenas eti, mn1, mn2, etc, las has definido como arrays de caracteres. No necesitas el símbolo & delante de ellas en los fscanf().
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar