2010-01-11 4 views
2

Je suis en train de faire des changements à un peu de notre application qui analyse un fichier csv. Nous avons un objet template qui possède un ensemble de champs privés représentant les colonnes csv et les getters et setters pour chacun. Cet objet n'est défini que lors de l'analyse du fichier csv.For Loop - Interrupteur refactoring dans le code d'analyse csv

Le code d'analyse lit chaque ligne du fichier csv dans un tableau de chaînes et divise le tableau en fonction de ','. Ensuite, il analyse chaque colonne en utilisant une boucle - structure de commutateur:

  for (int j = 0; j < sParsedInput.Length; j++) 
      { 
       sWork = sParsedInput[j]; 
       switch (j) 
       { 
        case 0: 
         Template.column1 = sWork; 
         break; 

        case 1: 
         dteTmpDate = Convert.ToDateTime(sWork); 
         sWork = dteTmpDate.ToString("MM/dd/yyyy"); 
         Template.column2 = Convert.ToDateTime(sWork); 
       } 
      } 

Il y a environ 10 colonnes, donc ce qui se passe un peu. Considérant que je devrai changer cette fonction depuis que le fichier d'entrée a été changé de façon spectaculaire, y a-t-il un moyen d'éviter la longue déclaration de commutateur? Je pensais à déplacer le code d'analyse vers les propriétés du modèle et à compter sur le setter pour faire la conversation de string à dateTime etc. Je ne suis pas sûr que ce soit une bonne solution car cela pourrait être déroutant si quelqu'un d'autre décide d'utiliser l'objet modèle à d'autres fins.

Merci

Répondre

1

Vous pouvez construire un objet d'aide, mais je factoriser le code ci-dessus pour seulement 3 lignes:

index = 0; 
Template.column1 =sParsedInput[index++]; 
dteTmpDate = Convert.ToDateTime(sParsedInput[index++]); 
... 

Et maintenant 10 colonnes un tracas isnt plus. Le compteur index facilite l'insertion et le déplacement des colonnes.

Je ne sais pas pourquoi vous avez été arrondi/déclenché le DateTime, il ne semblait pas nécessaire. Mais si c'est le cas, faites une méthode pour cela.

+0

Aucune idée de la façon dont le DateTime est traité de cette façon non plus, la variable de date temporaire n'est utilisée nulle part. Il y a d'autres cas de commutation qui font un peu plus de travail, donc je vais créer des fonctions pour eux. Merci! – Iris