2013-04-16 6 views
5

J'ai des données exportées pour exceller cela fonctionne très bien. Mais j'ai une petite questionComment générer un fichier CSV?

Ma production est exportée comme ceci:

enter image description here

Ce que je voudrais arriver est ceci:

enter image description here

et voici mon code exporter:

-(void)exportCSV { 

    NSArray * data = [NSArray arrayWithObjects:entries,keys, nil]; 
    NSLog(@"%@",data); 
    csv =[NSMutableString string]; 
    for (NSArray * line in data) { 
     NSMutableArray * formattedLine = [NSMutableArray array]; 
     for (field in line) { 
      BOOL shouldQuote = NO; 
      NSRange r = [field rangeOfString:@","]; 
      //fields that contain a , must be quoted 
      if (r.location != NSNotFound) { 
       shouldQuote = YES; 
      } 
      r = [field rangeOfString:@"\""]; 
      //fields that contain a " must have them escaped to "" and be quoted 
      if (r.location != NSNotFound) { 
       field = [field stringByReplacingOccurrencesOfString:@"\"" withString:@"\"\""]; 
       shouldQuote = YES; 
      } 
      if (shouldQuote == YES) { 
       [formattedLine addObject:[NSString stringWithFormat:@"\"%@\"\"%@\"", entries,keys]]; 
      } else { 
       [formattedLine addObject:field]; 
      } 
     } 

     NSString * combinedLine = [formattedLine componentsJoinedByString:@";"]; 
     [csv appendFormat:@"%@\n", combinedLine]; 

     NSLog(@"%@",csv); 
    } 

} 
+1

Il semble que votre première ligne dans 'data' représente les en-têtes de colonne, et les lignes suivantes contiennent les données. Puisque vous traitez les choses une ligne à la fois, vous obtenez ce que vous attendez. Pour obtenir la transposition, vous devez lire toutes les données dans les colonnes d'un tableau, puis les lire en lignes (ou vice versa). Ou, après avoir ouvert le fichier Excel pour la première fois, faites un "sélectionner tout - couper - coller spécial - transposer". Ce dernier serait plus facile ... – Floris

+1

Cette question n'a rien à voir avec Excel. Ceci est une question "générant CSV". – rmaddy

Répondre

3

Est-ce que ce qui suit fait ce que vous voulez?
Notez que je ne l'ai pas considéré comme citation, je laisse cela à vous;)
Notez également que je suppose que entries.count == keys.count

- (void)exportCSV {  
    NSArray *keys = @[@"T", @"R", @"RTT"]; 
    NSArray *entries = @[@"-329180696", @"1243918297", @"-998693494"]; 
    NSMutableString *csv = [[NSMutableString alloc] initWithCapacity:0]; 
    for (int i = 0; i < entries.count; i++) { 
     [csv appendFormat:@"%@;%@\n", keys[i], entries[i]]; 
    } 
} 

Sortie:

T; -329180696
R; 1243918297
RTT; -998693494

+0

Si je blême passer T; -321455,5565656,4555 alors comment puis-je le faire, je passai tableau pour la première clé, mais elle manifeste support dans csv T; ( un, deux, trois ) R; 1243918297 RTT; -998693494 – DeviPhone26

+0

Les '()' sont là parce que c'est l'implémentation de la méthode de description de 'NSArray'. Pouvez-vous s'il vous plaît me montrer comment vous avez changé le code dans ma réponse et à quoi ressemble votre structure de données? (d'où vient le '4555'?) – HAS

+0

NSArray * keys = @ [@" T ", @" R ", @" RTT "]; NSArray * oneArr = @ [@" un ", @" deux ", @ "three"]; NSString * alertString = [unArr componentsJoinedByString: @ ""]; NSArray * entries = @ [alertString, @ "1243918297", @ "- 998693494"]; NSMutableString * csv = [[NSMutableString alloc ] initWithCapacity: 0]; pour (int i = 0; i DeviPhone26

Questions connexes