le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014
-
Modifié par jordane45 le 23/10/2014 à 17:21
le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014
-
24 oct. 2014 à 11:07
Bonjour,
débutant en c# j'essaye de faire un tracé de courbes issues de plusieurs fichiers texte. Afin de faire ça j'essaye de créé un tableau à partir de tous mes fichiers chacun de mes fichiers étant une colonne de mon tableau voici mon code
try
{
int r = 1;
int c = 1;
string[] txtFiles = Directory.GetFiles(test);
foreach (string f in txtFiles)
{
StreamReader file = new StreamReader(f);
string line = file.ToString();
while ((line = file.ReadLine()) != null)
{
AffichePts.Rows[r].Cells[c].Value = line;
c++;
}
r++;
}
}
catch (Exception d)
{
MessageBox.Show(d.Message);
Application.Exit();
}
j'ai une erreur sur la cell active qui semble être x=-1 y=-1 :/
{
DataTable dt = new DataTable();
int index = 1;
string[] txtFiles = Directory.GetFiles(_CalypsoResultPath + "temp/");
foreach (string f in txtFiles)
{
string colum = "Courbe" + Convert.ToString(index);
System.IO.StreamReader file = new System.IO.StreamReader(f);
string[] columnnames = file.ReadLine().Split(' ');
foreach (string c in columnnames)
{
dt.Columns.Add(colum);
}
string newline;
while ((newline = file.ReadLine()) != null)
{
DataRow dr = dt.NewRow();
string[] values = newline.Split(' ');
for (int i = 0; i < values.Length; i++)
{
dr[i] = values[i];
}
dt.Rows.Add(dr);
}
index++;
file.Close();
}
AffichePts.DataSource = dt;
}
le but de mon code étant donc de créer une Row à chaque nouveau fichier. J'avais essayé avec uniquement AffichePts.Rows.add(line); malheureusement il n'incrémente pas les colonnes d'où mon code un peu à la con
Merci d'avance de votre aide
P.S : J'essaye également de faire un merge de X fichiers text pour contourner le problème, j'arrive à merge mais les éléments les uns à la suite des autres alors que je souhaiterai une colonne
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 23 oct. 2014 à 17:46
Bonsoir, peux tu mettre le format de ton fichier texte?
Tous tes fichiers ont ils le même nombre de ligne?
Le nombre de fichiers est fixe ou variable?
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 23 oct. 2014 à 17:47
Si le nombre de fichiers est variable, y a t-il des bornes connues?
le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014 23 oct. 2014 à 19:11
Bonsoir merci de ton aide.
Le nombre de fichier est aléatoire c'est pour cela que je pars sur un getfile. Le nombre de ligne est lui aussi aléatoire mais commun a chaque fichier au moment ou je les importe.
Je peux éventuellement mettre un END en dernière ligne vu que je retravaille les fichiers avant cette étape
Enfin le format a l'intérieur est tout con, une liste de chiffre decimaux a la suite dans une seule colonne .
Merci encore
le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014 23 oct. 2014 à 19:12
L'autre possibilité est merge de tous les fichiers en un seul a x colonnes
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 23 oct. 2014 à 19:23
Bon ça élimine le binding (à moins que tu te sentes la génération de classe en temps réel).
Je regarde ça.
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 23 oct. 2014 à 22:18
Pour remplir le datagridview
string path = Application.StartupPath + @"\test";
string[] txtFiles = Directory.GetFiles(path);//récupère le nom des fichiers dans le répertoire
List<string[]> fichiers = new List<string[]>(); //parce qu'avec .Add c'est plus simple
foreach(string chemin in txtFiles)
fichiers.Add(File.ReadAllLines(chemin));//File.ReadAllLines retourne directement un tableau de string contenant chaque lignes
for(int i = 0; i<fichiers.Count;i++)//on ajoute autant de colonnes que necessaire
dataGridView1.Columns.Add(new DataGridViewTextBoxColumn());
for(int i = 0; i < fichiers[0].Length;i++)//Puisque tous les fichiers ont le même nombre de lignes, je prend la longueur du premier tableau en référence
{
DataGridViewRow row = dataGridView1.Rows[dataGridView1.Rows.Add()];//ajoute une ligne
for(int j = 0; j<fichiers.Count;j++)
row.Cells[j].Value = fichiers[j][i];//remplit les cellules
}
le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014 23 oct. 2014 à 22:20
Merci bcp je test ça demain au taf ;)
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 23 oct. 2014 à 22:23
De rein
le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014 24 oct. 2014 à 09:10
je me permet de te re remercier ça marche parfaitement même si à la fin avec 33 fichiers et 60 lignes par fichier c'est assez long niveau traitement je vais essayer de mettre un message d'attente ;).
Reste plus qu'à tracer tout ça
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 24 oct. 2014 à 09:52
Bonjour, pour le graphisme il y a le controle Charts.
Un bon tuto pour commencer
http://plasserre.developpez.com/cours/chart/ c'est en VB.Net mais la transcription en C# se fait bien.
Concernant le temps d'exécutrion ça vient je pense de la saisie du datagridview cellule par cellule, je pense qu'en bindant ça irait plus vite.
Avec un dataset peut etre.
le_pere_noel
Messages postés17Date d'inscriptionjeudi 23 octobre 2014StatutMembreDernière intervention25 octobre 2014 24 oct. 2014 à 10:13