Je charge un fichier délimité par des virgules dans une liste, aucun problème ici. Sauf que le dernier segment est séparé par un point-virgule que je dois mettre dans un tableau qui a un nom de propriété. Dans ce cas, séquence et rotation. Le code ci-dessous fonctionne sauf en lui donnant un nom de propriété.

Tout conseil serait très apprécié. J'ai gardé le code ci-dessous pour éviter l'encombrement.

Exemple de fichier CSV: Bar001,P02;90

class PartDetail 
{
 public string Description 
 {
  get;
  set;
 }
 public string[] BottomEdge 
 {
  get;
  set;
 }


 public class SpecificDetails << < I want to use this class to specify the property name. {
  public string Sequence 
  {
   get;
   set;
  }
  public string Rotation 
  {
   get;
   set;
  }
 }

 public PartDetail(string line) 
 {
  string[] parts = line.Split(',');
  this.Description = parts[0];
  this.BottomEdge = parts[1].Split(';'); << It 's here where I am struggling.
 }
}
c#
0
Pirate 27 janv. 2019 à 15:23

3 réponses

Meilleure réponse

Je pense que ça fera l'affaire

class PartDetail 
{
 ....
 //create an instance of your SpecificDetails class
 SpecificDetails Details = new SpecificDetails();
 ...
 public PartDetail(string line) 
 {
  string[] parts = line.Split(',');
  this.Description = parts[0];
  this.BottomEdge = parts[1].Split(';'); 

  //assign the value to the properties of the "Details" instance
  this.Details.Sequence = this.BottomEdge[0];
  this.Details.Rotation = this.BottomEdge[1];
 }
}
1
Gouda 27 janv. 2019 à 12:40

Dot net dispose d'un analyseur CSV intégré, il n'est donc pas nécessaire de lancer le vôtre (https://coding.abel.nu/2012/06/built-in-net-csv-parser/)

using (TextFieldParser parser = new TextFieldParser(path))
{
parser.CommentTokens = new string[] { "#" };
parser.SetDelimiters(new string[] { ";" });
parser.HasFieldsEnclosedInQuotes = true;

// Skip over header line.
parser.ReadLine();

while (!parser.EndOfData)
{
    string[] fields = parser.ReadFields();

}
}

Une fois analysé, vous vous retrouvez avec le problème du point-virgule, qui peut facilement être résolu avec string.Split.

0
Neil 27 janv. 2019 à 12:53

Utilisez line.Split(new char[]{ ',', ';'}) et choisissez simplement le dernier index du tableau renvoyé pour être le segment de fermeture de votre logique.

0
Akram Qalalwa 27 janv. 2019 à 12:29