J'aimerais enregistrer ces données dans des objects dont voici la classe:
public class GasTable
{ public string name;
public string symbol;
public double rho;
public double cp; }
Après avoir lu pas mal de pages dans un manuel, j'ai une certaine idée de ce que je veux faire, malheureusement par mon manque d'expérience en c#, je s'ais pas comment le traduire "informatiquement":
je voudrais: créer un StreamReader qui enregistre chaque ligne dans un string.
Ensuite diviser cette chaine à l'aide de Split(avec le caractère Tabulation comme diviseur).
Convertir les morceaux obtenu en double (pour rho et cp).
Assigner toutes les valeurs obtenues à un array gas[] de classe GasTable
Vous pouvez me montrer comment on fait ça?
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 20 oct. 2006 à 08:12
Oups,
c'est de ma faute.
Dans un premier temps, pour qu'il ne me mette pas trop d'erreur, j'ai mis des objet à la place des GasTable.
Il faut donc remplacer cette ligne par
GasTable gasLine = new GasTable();
Pour la version, si tu travailles pour une école et qu'il t'on fourni le VS, je ne peux pas faire grand chose. Par contre, si tu travailles pour toi, tu peux télécharger gratuitement le Visual C# Express, qui ne travaille qu'avec du C#, mais devrait être largement suffisant pour ce que tu essaie de faire.
Un petit conseil, évite de nommer une variable GasTable si tu utilise une classe GasTable. Ta variable peut s'appeler GasList, et ton code gagnera en lisibilité.
La différence entre la List que j'avais proposée et l'ArrayList, tiens dans le fait que la 1ère est générique, on peut donc indiquer le types des éléments contenus (GasTable). La seconde contient n'importe quel objet, qu'il faudra typecaster à la sortie.
GasTable g = (GasTable)GasList[0];
manuweb_21
Messages postés15Date d'inscriptionmardi 10 octobre 2006StatutMembreDernière intervention20 octobre 2006 19 oct. 2006 à 18:29
Merci pour la réponse. Au fait comme personne me répondait j'ai finalement réussi a le faire mais justement en utilisant un tableau, mais comme tu le dis c'est pas trop pratique et pas tres élégant. J'ai essayé avec ta List. Malheureusement je dois pas avoir la bonne version. J'ai utilisé ArrayList, mais je comprends pas pourquoi ça marche pas: j'ai ce message:" 'object' does not contain a definition for symbol, cp, ..."
I doit y avoir un problème dans la reconnaissance de la classe, je sais pas???
using System;
using System.IO;
using System.Collections;
namespace ConsoleApplication1
{
class Class1
{
static void Main(string[] args)
{
FileStream fs = File.OpenRead("Konversionstabelle.txt");
StreamReader sr = new StreamReader(fs);
string line = sr.ReadLine();
ArrayList GasTable = new ArrayList();
while (line != null)
{
string[] splitted = line.Split(new char[] { '\t' });
object gasLine = new object();
gasLine.name = splitted[0];
gasLine.symbol = splitted[1];
gasLine.rho = Convert.ToDouble(splitted[2]);
gasLine.cp = Convert.ToDouble(splitted[3]);
GasTable.Add(gasLine);
}
sr.Close();
fs.Close();
}
public class GasTable
{
public string name;
public string symbol;
public double rho;
public double cp;
}
}
}
manuweb_21
Messages postés15Date d'inscriptionmardi 10 octobre 2006StatutMembreDernière intervention20 octobre 2006 20 oct. 2006 à 09:49
Merci beaucoup pour tes conseils. Maintenant ça marche nikel et cette Arraylist est bien plus approprié que mon tableau. Y avait juste encore une petite erreur.
Le Readline, i faut qu'i soit dans la boucle, sinon i peut pas y avoir d'incrémentation et la boucle reste bloquée sur le premier élément jusqu'a l'infini . Je l'ai remplacée par:
while(true)
{
string line = sr.ReadLine();
if (line == null)
{
break;
}
.............
.............
}