Convertir une chaine en nombre

TopCao

Membre confirmé
29 Décembre 2010
14
0
Salut,

Je fais un petit programme en objectiv-c dans Xcode.
Celui ci va chercher une chaine de caractères dans un fichier et me la retourne sous la forme de NSString

Ensuite je voudrais réccup la valeur de la chaine (qui est un nombre) pour l'utiliser comme si c'était c'était un entier.

Bloc de code:
NSString		*val;
DCMAttribute	*attr;
val = [[attr value] description];	
attr = [dcmObj attributeForTag:tag];
int bValue = [val intValue];

Mon code me retourne une erreur
Je ne pige pas comment m'en sortir
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
 
Tu récupères la valeur de "attr" et juste après tu positionnes la valeur de cette variable. Ne faudrait-il pas faire l'inverse ? :confused: :siffle: Je pense que "val" est un peu égale à NIL :siffle:
 
En effet, mon code est le suivant :

Bloc de code:
NSString        *val;
DCMAttribute    *attr;
attr = [dcmObj attributeForTag:tag];
val = [[attr value] description];    
int bValue = [val intValue];
 
Donc avant d'utiliser les variables dcmObj, attr et val, as-tu vérifié si elles étaient nulles ou non ? :confused:

Apprend à utiliser le débogueur :zen:
 
Donc avant d'utiliser les variables dcmObj, attr et val, as-tu vérifié si elles étaient nulles ou non ? :confused:

Apprend à utiliser le débogueur :zen:

Si je fais un NSLog(@"val = %@",val);

il me retourne correctement les valeurs de val :
val = 0
val = 500
val = 1000

Je souhaiterai réccupérer ces valeurs sous la forme de int et les ranger dans un tableau
 
Si val n'est pas nul, il y a autre chose autre part que tu ne nous as pas montré. :siffle:

Voilà tout le code :

Bloc de code:
[SIZE=2]- (long) filterImage:(NSString*) menuName[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]NSWindowController *window = [[NSWindowController alloc] initWithWindowNibName:@"Control_Panel" owner:self]; [/SIZE]
[SIZE=2][window showWindow:self]; // This will bring up the window[/SIZE]
 
[SIZE=2]// Reading DICOM META DATA - Search for b values[/SIZE]
[SIZE=2]int t;[/SIZE]
[SIZE=2]int nbTimes = [viewerController maxMovieIndex];[/SIZE]
[SIZE=2]for( t = 0; t < [viewerController maxMovieIndex]; t++)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]NSArray *pixList = [viewerController pixList: t];[/SIZE]
[SIZE=2]NSMutableArray *bValues = [NSMutableArray arrayWithCapacity:nbTimes];[/SIZE]
[SIZE=2]long curSlice = [[viewerController imageView] curImage];[/SIZE]
[SIZE=2]DCMPix *curPix = [pixList objectAtIndex: curSlice];[/SIZE]
[SIZE=2]NSString *file_path = [curPix sourceFile];[/SIZE]
[SIZE=2]NSString *dicomTag = @"0018,9087";[/SIZE]
[SIZE=2]DCMObject *dcmObj = [DCMObject objectWithContentsOfFile:file_path decodingPixelData:NO];[/SIZE]
[SIZE=2]DCMAttributeTag *tag = [DCMAttributeTag tagWithName:dicomTag];[/SIZE]
[SIZE=2]if (!tag) tag = [DCMAttributeTag tagWithTagString:dicomTag];[/SIZE]
[SIZE=2]NSString *val;[/SIZE]
[SIZE=2]DCMAttribute *attr;[/SIZE]
 
[SIZE=2]if (tag && tag.group && tag.element)[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]attr = [dcmObj attributeForTag:tag];[/SIZE]
[SIZE=2]val = [[attr value] description]; [/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]NSRunInformationalAlertPanel(@"Metadata",[/SIZE]
[SIZE=2][NSString stringWithFormat:[/SIZE]
[SIZE=2]@"Tag Name:%@\nTag ID:%04x,%04x\nTag VR:%@\nValue:%@",[/SIZE]
[SIZE=2]tag.name, tag.group, tag.element, tag.vr, val],[/SIZE]
[SIZE=2]@"OK", 0L, 0L);[/SIZE]
 
[SIZE=2]NSLog(@"val = %@",val);[/SIZE]
[SIZE=2]//int bValue = [val intValue];[/SIZE]
[SIZE=2]//NSLog(@"bValue = %@",bValue); [/SIZE]
[SIZE=2][bValues addObject:val];[/SIZE]
[SIZE=2]//NSLog(bValues);[/SIZE]
[SIZE=2]} [/SIZE]
 
[SIZE=2]return 0; // No errors[/SIZE]
[SIZE=2]}[/SIZE]
 
Bloc de code:
if (tag && tag.group && tag.element)
{
attr = [dcmObj attributeForTag:tag];
val = [[attr value] description]; 
}
Si tu ne rentres pas dans le bloc, val est nul ou tout du moins non initialisé et donc ça va planter plus loin lors de son utilisation.
 
Comment fait on pour exporter la valeur de la variable à l'ensemble du programme ?

On ne fait pas.

Non pas que ce soit impossible (ça s'appelle une variable globale) mais c'est la meilleure manière de rendre un programme bogué et impossible à modifier. Il existe toujours un autre moyen.
 
On apprend à utiliser les design pattern et dans ce cas le singleton. Mais bien sûr à n'utiliser qu'à bon escient :zen:

Et quel rapport avant ton problème ? :confused:
Mon programme est divisé en 2 fonctions
- la première va lire le header contenu dans des fichiers DICOM pour en extraire des valeurs (partie faite et qui fonctionne bien)
- la seconde va utiliser ces valeurs dans des calculs.
- pour courronner le tout, les valeurs devraient pouvoir s'afficher dans la GUI

merci pour votre aide
 
Mon programme est divisé en 2 fonctions
- la première va lire le header contenu dans des fichiers DICOM pour en extraire des valeurs (partie faite et qui fonctionne bien)
- la seconde va utiliser ces valeurs dans des calculs.
- pour courronner le tout, les valeurs devraient pouvoir s'afficher dans la GUI

merci pour votre aide

creer un object DICOM qui represente les valeurs lues dans un fichier
si tu as plusieur tu crees une collection (ARRAY/VECTOR) puis tu wrap tout ca dans une class DICOMController
que tu instancies pour le dure de vie de ton app (app delegate), les membres de classe "sont la chose que tu veux"

je te conseillerais plutot de commencer avec des simples programmes en c++ avant t'attaquer cocoa et ses objets
ou plus simple python ou ruby il te manque des grosses bases on ne travaille pas avec des fonctions flottantes (meme en C plain on utilise des patterns comme les exo-constructors (une structure passée par ref de function en function un bonne exemple le corefoundation d'apple))
 
creer un object DICOM qui represente les valeurs lues dans un fichier
si tu as plusieur tu crees une collection (ARRAY/VECTOR) puis tu wrap tout ca dans une class DICOMController
que tu instancies pour le dure de vie de ton app (app delegate), les membres de classe "sont la chose que tu veux"

je te conseillerais plutot de commencer avec des simples programmes en c++ avant t'attaquer cocoa et ses objets
ou plus simple python ou ruby il te manque des grosses bases on ne travaille pas avec des fonctions flottantes (meme en C plain on utilise des patterns comme les exo-constructors (une structure passée par ref de function en function un bonne exemple le corefoundation d'apple))

Comme je le disais en préambule de ce post, je débute totalement dans la programmation en cocoa. J'ai fait beaucoup d'algorithmique avec MatLab, que j'ai appris seul et sur le tas, mais je ne suis pas du tout informaticien et je n'ai jamais pris de cours. Même si j'en avais envie, je n'en n'aurai pas le temps...
Bref, tout ca pour te demander conseil sur OU et COMMENT obtenir ces grosses bases qu'il me manque.
Merci pour ton aide en tout cas.
 
Comme je le disais en préambule de ce post, je débute totalement dans la programmation en cocoa.
C'est là le problème : Cocoa c'est la dernière étape, pas la première. :siffle:

Il te manque les bases de la programmation, du C, de la programmation objet, de l'Obj-C; et après savoir maîtriser un minimum tout cela, tu pourras essayer de comprendre Cocoa.

Il y a tout les tutoriels qu'il te faut sur Google et on en a déjà mille fois parlé sur ce fourm, fais une recherche. :zen: