1

How can I create a csv file from a generic list of objects? In the example, a list of molecules, containing 3 objects of the type Molecule:

namespace example_reactioncalc
{
 class Program
 {
 public class Molecule
 {
 public double property_A { get; set; }
 public double property_B { get; set; }
 }
 public static Molecule Reaction(Molecule molecule_1, Molecule molecule_2)
 {
 Molecule reacted_molecule = new Molecule();
 reacted_molecule.property_A = molecule_1.property_A + molecule_2.property_A;
 reacted_molecule.property_B = (molecule_1.property_B + molecule_2.property_B) / 2;
 return reacted_molecule;
 }
 static void Main(string[] args)
 {
 // Initiation of the list of molecules
 List<Molecule> molecules = new List<Molecule>();
 // Adding two molecules to the list
 molecules.Add(new Molecule() { property_A = 10, property_B = 20 });
 molecules.Add(new Molecule() { property_A = 3, property_B = 7 });
 // Reacting two molecules to get a new one: 
 Molecule new_molecule=Reaction(molecules[0],molecules[1]);
 molecules.Add(new_molecule);

Here, one can print the content of one of the properties of the list for the 3 objects:

 Console.WriteLine("Properties A and B of the 1st molecule:");
 Console.WriteLine(molecules[0].property_A);
 Console.WriteLine(molecules[0].property_B);
 Console.WriteLine("Property A and B of the 2nd molecule:");
 Console.WriteLine(molecules[1].property_A);
 Console.WriteLine(molecules[1].property_B);
 Console.WriteLine("Property A and B of the 3rd, new molecule:");
 Console.WriteLine(molecules[2].property_A);
 Console.WriteLine(molecules[2].property_B);
 Console.ReadLine();
 }
 }
}

The output:

Properties A and B of the 1st molecule:
10
20
Properties A and B of the 2nd molecule:
3
7
Properties A and B of the 3rd, new molecule:
13
13.5

So I need a csv file with the complete output:

10,20
3,7
13,13.5

I tried to find such method in the forums, but I only found examples for generic lists of arrays, and I was not able to make them work. I really appreciate any help on this issue (I'm a beginner in C#).

asked May 14, 2020 at 23:04
3

2 Answers 2

6

CSV files are pretty straight forward to generate:

using (StreamWriter writer = new StreamWriter("myfile.csv"))
{
 foreach (Molecule molecule in molecules)
 {
 writer.WriteLine($"{molecule.property_A},{molecule.property_B}");
 }
}
answered May 14, 2020 at 23:19

4 Comments

Thanks for your reply! I'm getting an error: "The type or namespace 'StreamWriter' could not be found (are you missing a using directive or an assembly reference?)". Any guess of what should I do next?
I found a correction for this: using (System.IO.StreamWriter writer = new System.IO.StreamWriter(@"myfile.csv")) Now it is working perfectly. Thank you so much!
@itsme86 Your answer works perfectly! Do you know if there's a way to include the Headers from a list into the .csv file as well please?
@GBM Yes. All you need to do is write the header line as a comma-separated list before your loop. So just before the foreach line above, you can add writer.WriteLine("Property A,Property B");.
1

Have you tried System.IO.File yet? It's a simple way of opening and writing to a file: example.

It looks like you'll need some sort of method like the following;

 WriteMoleculesToFile(string pathToFile, List<Molecule> molecules) {
 using (System.IO.StreamWriter file = new System.IO.StreamWriter(@pathToFile)) {
 foreach (Molecule molecule in molecules) {
 file.WriteLine(String.Format("{0},{1}",molecule.property_A, molecule.property_B));
 }
 }
 }
answered May 14, 2020 at 23:26

2 Comments

I was not able to run it. Molecule is not an array. I get the error: "Argument 2: cannot convert from 'System.Collections.Generic.List<example_reactioncalc.Program.Molecule>' to 'example_reactioncalc.Program.Molecule[]'
Here, try the edit instead. Should accept a List instead of an Array now

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.