Importer des données en CSV (résolu)
orfait
Membre
Bonjour,
Je vous passe les formalités... en gros, je cherche à récupérer des données d'un fchier .csv séparé avec des ";" et ce que j'ai codé plante si je met "\r" dans le premier séparateur (cf en dessous).
Si je mets "\n", toutes les données sont sur une seule ligne... Donc mon
controller.h
Si un bout de code n'est pas clair, je l'expliquerai volontiers... c'est difficile de retracer tout ce que j'ai fait depuis le début.
Merci
Je vous passe les formalités... en gros, je cherche à récupérer des données d'un fchier .csv séparé avec des ";" et ce que j'ai codé plante si je met "\r" dans le premier séparateur (cf en dessous).
Si je mets "\n", toutes les données sont sur une seule ligne... Donc mon
-
vaut 1 et mon tableau est incomplet.Alors soit je n'ai rien compris (sisi, c'est possible), soit je suis à côté de la plaque ou soit il y a un petit bug qui traine...Voilà le seul et unique code que j'ai (j'espère qu'il n'est pas trop sale) :controller.m
#import "controller.h"<br /><br />@implementation controller<br /><br />- (IBAction)a_sauver:(id)sender {<br />Â Â <br />}<br />- (void)awakeFromNib {<br />NSString *path = [[NSBundle mainBundle] pathForResource:@"LOG" ofType:@"csv"];<br />NSString *fileContents = [NSString stringWithContentsOfFile:path];<br />NSArray *list = [fileContents componentsSeparatedByString:@"\r"];<br />TableContacts = [[NSMutableArray alloc]initWithCapacity:[list count]];<br /><br />Â Â int i;<br />Â Â <br />Â Â for (i=0; i<[list count]; i++)<br />Â Â {<br />Â Â Â NSString *line = [list objectAtIndex:i];<br />Â Â Â NSMutableArray *csv = [[NSMutableArray alloc] initWithArray:[line componentsSeparatedByString:@";"]];<br /><br />Â Â Â [TableContacts addObject:csv];<br />Â Â Â [csv release];<br />Â Â }<br />}<br /><br />- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {<br />[o_tableau reloadData];<br />}<br /><br />- (int)numberOfRowsInTableView:(NSTableView *)aTableView<br />{<br />return [TableContacts count];<br />}<br /><br />- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex<br />{<br />return [[TableContacts objectAtIndex:0] objectAtIndex:(rowIndex+3)]; // CODE SANS SIGNIFICATION SUR LES DONNEES (POUR TEST)<br />}<br /><br /><br />@end<br />
controller.h
#import <Cocoa/Cocoa.h><br /><br />@interface controller : NSObject {<br /> NSMutableArray *TableContacts;<br />Â Â IBOutlet id o_tableau;<br /> IBOutlet id o_array; // NON UTILISE<br />}<br />- (void)applicationDidFinishLaunching:(NSNotification *)aNotification;<br />- (IBAction)a_sauver:(id)sender;<br />- (int)numberOfRowsInTableView:(NSTableView *)aTableView;<br />- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;<br />@end
Si un bout de code n'est pas clair, je l'expliquerai volontiers... c'est difficile de retracer tout ce que j'ai fait depuis le début.
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Sous Mac, alors c'est \r. Sous Unix, c'est \n, et sous Windows, c'est \r\n.
Bref, ton premier componentsSeparatedByString:@\r n'est pas idéal.
Pour être sûr de récupérer les vrais lignes de ton csv (avant de les décomposer avec le point-virgule), c'est d'utiliser getLineStart:end:contentsEnd:forRange: de NSString (fais une recherche sur OC, ça déjà été expliqué).
Une fois la ligne récupérée et non vide, il ne te reste plus qu'à décomposer avec le second componentsSeparatedByString:@;.
.
J'ai suivi ton exemple dans cet autre topic et ça roule !
Pour les curieux ou bien ceux qui auraient les mêmes besoins, j'ai fait une fonction d'importation toute simple.
Fonction d'importation :
Appel :
Si c'est trop salement codé, je suis ouvert aux propositions d'améliorations...