DLL et CSV
Résolu/Fermé
Theolit
Messages postés
39
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
20 avril 2021
-
Modifié le 22 févr. 2021 à 13:05
Utilisateur anonyme - 20 avril 2021 à 09:52
Utilisateur anonyme - 20 avril 2021 à 09:52
24 réponses
Utilisateur anonyme
31 mars 2021 à 20:32
31 mars 2021 à 20:32
Dans ce cas, il faut changer la regex.
Si c'est toujours Variable_ suivit du nom de la variable, alors la regex est
Si c'est toujours Variable_ suivit du nom de la variable, alors la regex est
@"^Variable_\w+$"
Theolit
Messages postés
39
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
20 avril 2021
31 mars 2021 à 20:34
31 mars 2021 à 20:34
Et si je n’ai rien devant ne nom ?
C’est à dire pas de pattern défini ?
C’est à dire pas de pattern défini ?
Utilisateur anonyme
31 mars 2021 à 21:45
31 mars 2021 à 21:45
Le 1/03 je t'ai écrit
Et ça n'est que maintenant, parce que volontairement je joue à l'idiot pour te forcer la main, que tu commences à esquisser
Je n'ai pas accès à tes fichiers (à part 2 morceaux dont je ne sais pas à quel point ils sont représentatifs). Je ne peux pas me faire une idée générale de ce qui pourrait marcher.
Donc quand je te dis "j'ai constaté... je pars sur cette base..." et que c'est faux, c'est toi qui perd du temps à ne pas le dire.
On est bien d'accord que le but c'est que l'opérateur n'ait pas à définir où commence chaque mesurande? (Et je veux une réponse claire)
Dans ce cas il faut trouver quelque chose de reproductible.
Au début, tu parlais des nombres à la fin des entêtes de la ligne 10.
Que tous les 1 correspondent à un mesurande, les 2 au suivant etc...
Est ce que ça, c'est toujours vrai? (Et je veux une réponse claire)
Bon j'aurais eu d'autres questions, mais j'ai émis des hypothèses (elles sont en commentaire dans le code).
Si elle ne sont pas exactes, faudra me le dire
Et ça n'est que maintenant, parce que volontairement je joue à l'idiot pour te forcer la main, que tu commences à esquisser
C’est à dire pas de pattern défini ?ce qui sous entends qu'au moins une hypothèse n'est pas valable du tout (pas juste qu'il faut l'adapter un peu), mais tu ne le dis toujours pas clairement.
Je n'ai pas accès à tes fichiers (à part 2 morceaux dont je ne sais pas à quel point ils sont représentatifs). Je ne peux pas me faire une idée générale de ce qui pourrait marcher.
Donc quand je te dis "j'ai constaté... je pars sur cette base..." et que c'est faux, c'est toi qui perd du temps à ne pas le dire.
On est bien d'accord que le but c'est que l'opérateur n'ait pas à définir où commence chaque mesurande? (Et je veux une réponse claire)
Dans ce cas il faut trouver quelque chose de reproductible.
Au début, tu parlais des nombres à la fin des entêtes de la ligne 10.
Que tous les 1 correspondent à un mesurande, les 2 au suivant etc...
Est ce que ça, c'est toujours vrai? (Et je veux une réponse claire)
Theolit
Messages postés
39
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
20 avril 2021
1 avril 2021 à 08:33
1 avril 2021 à 08:33
Oui, j'avais bien lu, mais le problème est que je voulais réellement partir d'un fichier sous la forme du premier (avec varXXX) Mais j'ai découvert récemment que d'autres fichier n'ont pas la même forme. C'est à dire qu'ils n'ont pas de mots devant chaque Nom de variables , etc ...
Exemple :
J'avais bien compris, mais ayant reçu des informations aux compte gouttes (différents fichiers etc...) c'était un peu trop flou pour moi, pour que je puisse te répondre efficacement. D'ailleurs, je m'en excuse.
Effectivement, le but final est que la personne qui va utiliser cette DLL aura juste à appeler une fonction du genre:
Au début, tu parlais des nombres à la fin des entêtes de la ligne 10.
Que tous les 1 correspondent à un mesurande, les 2 au suivant etc...
Effectivement, C'est toujours vrai. D'où ma volonté de départ de récupérer ce chiffre.
Chaque mesurande aura un index en ligne 10, sous la forme :
Mais en fonction des fichiers, le nom de ces colonnes est amené à changer (en gardant l'index en fin)
Exemple pour un même mesurande:
Voilà voilà, j'espère avoir été assez claire cette fois ...
Merci d'avance pour tout.
Exemple :
Test Name:;;Nom;;;;;;;;;;;;No modification;;;;;Variable_dB;Test;;;Offset;;;
Test Nr:;;123;;;;;;;;;;;;Comments:;;;;;Variable Name;Offset_Modification;;;Offset;;;
Cost Center;;123*;;;;;;;;;;;;Control plan;;;;;Datatyp;1;;;1;;;
Modification date:;;20/03/2021;;;;;;;;;;;;;;;;;Distribution;1;;;1;;;
"Resp; of modif.:";;Moi.;;;;;;;;;;;;;;;;;Unit;mV;;;mV;;;
File Name;;Nom_123;;;;;;;;;;;;;;;;;Lower_limit ;85%;;;85%;;;
File Place;;C:\Temp;;;;;;;;;;;;;;;;;Upper_limit ;85%;;;85%;;;
;;;;;;;;;;;;;;;;;Doc;;Middle_Value_limit (in %);40;;;40;;;
;;;;;;;;;;;;;;;;;No document;;Standard_Dev_limit (in %);10;;;10;;;
Variant;Type;Bla;BlaBla;4;5;6;7;8;9;10;11;12;BlaBlaBla;MLFB_RegEx;Inspection_Plan;Inspection_Plan_Name;Inspection_Plan_Drawing_Index;Inspection_Order;Nber_of_Variable;Nominal_Value_1;Lower_Tol_1;Upper_Tol_1;Nominal_Value_2;Lower_Tol_2;Upper_Tol_2;Remark
ABC;P;BLA-.;UH;[48];0;.;.;.;A;.;.;22;;BLA-.UH[48]0...A..22;DEF-BLA-.UH[48]0...A..22;DEF 0,25 bar;1;DEF-.UH[48]0...A..22-1;2;-6,5;-1,5;1,5;0;-61;61;123
YZ;P;PLA-.;UH;[48];0;.;.;.;B;.;.;22;;PLA-.UH[48]0...B..22;XY-PLA-.UH[48]0...B..22;XY 1 bar;1;XY-.UH[48]0...B..22-1;2;-2,1;-0,9;0,9;0;-18;18;456
J'avais bien compris, mais ayant reçu des informations aux compte gouttes (différents fichiers etc...) c'était un peu trop flou pour moi, pour que je puisse te répondre efficacement. D'ailleurs, je m'en excuse.
Effectivement, le but final est que la personne qui va utiliser cette DLL aura juste à appeler une fonction du genre:
GetValue("La chaine Regex","Le nom du mesurande", "La colonne cherché"); OU GetValue("Regex","Offset", "Upper_Tol");
Au début, tu parlais des nombres à la fin des entêtes de la ligne 10.
Que tous les 1 correspondent à un mesurande, les 2 au suivant etc...
Effectivement, C'est toujours vrai. D'où ma volonté de départ de récupérer ce chiffre.
Chaque mesurande aura un index en ligne 10, sous la forme :
;Nominal_Value_1;Lower_Tol_1;Upper_Tol_1;
Mais en fonction des fichiers, le nom de ces colonnes est amené à changer (en gardant l'index en fin)
Exemple pour un même mesurande:
;Value_1;Upp_Off_1;Lower_Tol_1;
Voilà voilà, j'espère avoir été assez claire cette fois ...
Merci d'avance pour tout.
Utilisateur anonyme
5 avril 2021 à 16:06
5 avril 2021 à 16:06
Essaye ça
/// <summary> /// Construit une instance de DonneeTheolit à partir d'un csv /// </summary> /// <param name="Filename"></param> public ImportDonneTheolit(string Filename) { filename = Filename; if (!File.Exists(Filename)) throw new Exception("Fichier introuvable"); if (Path.GetExtension(Filename).ToLower() != ".csv") throw new Exception("Mauvaise extension"); //Lecture du fichier string[] lesLignes = File.ReadAllLines(Filename, Encoding.Default); //Hypothèse 1, les métadatas sont toujours dans les 10 premières lignes List<string[]> metadatas = (from l in lesLignes.Take(10) select l.Split(';') ).ToList(); //les hypothèses 2 et 3 ne sont pas applicables à tous les fichiers //hypothèse 4, le modèle AAAA_XX de la dernière ligne de métadatas permet de générer les prototypes. //dans un premier temps en groupant les entêtes en fonction de XX //dans un seconde temps en en tirerant les prototypes var entetesIndexes = metadatas[9].Select((texte, ind) => new { texte, ind }); List<PrototypeMesurande> prototypes = (from x in entetesIndexes let m = Regex.Match(x.texte, @"^(?<entete>[\w_]+)_(?<numero>\d+)$") where m.Success group new { ind = x.ind, numero = m.Groups["numero"].Value, entete = m.Groups["entete"].Value } by m.Groups["numero"].Value into g select new PrototypeMesurande(metadatas[0][g.First().ind], g.First().ind, g.Select(y => y.entete).ToArray()) ).ToList(); //hypothèse 5, l'index de la colonne MLFB_RegEx change mais son nom reste le même int indexRegex = entetesIndexes.First(x => x.texte == "MLFB_RegEx").ind; //hypothèses 6, la dernière ligne du fichier est a exclure de l'import var import = lesLignes.Skip(10).ToList();//on exclue les 10 premières ligne du fichier import = import.Take(import.Count - 1).ToList();//on exclue la dernière ligne //import des données Datas = (from l in import let split = l.Split(';') select new DonneeTheolit(split[0], split[indexRegex], ToMesurandes(split, prototypes)) ).ToList(); }
Theolit
Messages postés
39
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
20 avril 2021
6 avril 2021 à 09:26
6 avril 2021 à 09:26
La récupération des données fonctionne !
Par contre:
Me revoie "null" . (Mes valeurs sont bien dans le tableau.
Est ce que je dois ajouter un 'Regex.Match' pour faire correspondre d.DonneRegex et DonneRegex?
Par contre:
public Mesurande TrouveMesurande(string Nom, string DonneeRegex) { return Datas.FirstOrDefault(d => d.DonneeRegex == DonneeRegex)?.Mesurandes.FirstOrDefault(m => m.Nom == Nom); }
Me revoie "null" . (Mes valeurs sont bien dans le tableau.
Est ce que je dois ajouter un 'Regex.Match' pour faire correspondre d.DonneRegex et DonneRegex?
31 mars 2021 à 19:42