Προς το περιεχόμενο

CSV σε object (C# ή VB.NET)


tolhc1234

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα,

Έχω το εξής csv αρχείο

col1,col2,col3,col4,col5
1,1,1,1,1
1,1,1,2,1
1,1,1,3,6
2,2,2,1,4
2,2,2,2,7

Όπου θέλω να φτιάξω 2 διαφορετικά object αυτής της μορφής:

Spoiler

{
  "object": 
    {
      "col1": 1,
      "col2": 1,
      "col3": 1,
      "details": [
        {
          "col4": 1,
          "col5": 1
        },
        {
          "col4": 2,
          "col5": 1
        },
        {
          "col4": 3,
          "col5": 6
        }
      ]
    }
}

object2:


{
  "object":
  {
      "col1": 2,
      "col2": 2,
      "col3": 2,
      "details": [
        {
          "col4": 1,
          "col5": 4
        },
        {
          "col4": 2,
          "col5": 7
        }
      ]
    }
}

 

Η γλώσσα που πρέπει να χρησιμοποιήσω είναι είτε c# είτε vb.net.

Το θέμα μου είναι ότι ΟΚ το βάζω το csv σε ένα πίνακα/λίστα/dataset/whatever

Πως θα γκουπάρω τις πρώτες κολώνες για να μπορώ να γεμίζω το object μου σωστά;

Αυτό που έχω σκεφτεί είναι να κάνω ένα foreach row in rows σε αυτό το αντικείμενο που θα έχω γεμίσει από το csv.

Αλλά εκεί, μόλις τελειώσω με το πρώτο object θέλω να τρέξω κάποια διαδικασία.

Είδα με LINQ ότι μπορώ να κάνω group by, η ερώτηση είναι, μπορώ να κάνω group by πολλές στήλες ταυτόχρονα; (Δεν έχω ιδέα από LINQ)

Κάποια άλλη άποψη;

Edit: Θεωρούμε πάντα ότι οι στήλες col1,col2,col3 θα είναι πάντα ίδιες για κάθε object για να μπορούμε να κάνουμε group by

Επεξ/σία από tolhc1234
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

        static void Main(string[] args)
        {
            try
            {
                var input =
@"col1,col2,col3,col4,col5
1,1,1,1,1
1,1,1,2,1
1,1,1,3,6
2,2,2,1,4
2,2,2,2,7";

                var lines = input.Split('\n');

                var objects = lines
                    //vgale toys headers
                    .Skip(1)
                    //xwrise th grammh me komma
                    .Select(x => x.Split(','))
                    //vale ta 3 prwta se ena tuple gia na ginei sigrish
                    .Select(x =>
                    new
                    {
                        obj = new Tuple<string, string, string>(x[0], x[1], x[2]),
                        col4 = x[3],
                        col5 = x[4]
                    })
                    //kane groupby tria prwta
                    .GroupBy(x => x.obj)
                    //vele ta tria prwta sto object
                    .Select(x => new
                    {
                        col1 = x.Key.Item1,
                        col2 = x.Key.Item2,
                        col3 = x.Key.Item3,
                        //vale ta 2 teleytaia se lista
                        details = x.Select(q => new { q.col4, q.col5 }).ToList()
                    });

                foreach (var obj in objects)
                {
                    Console.WriteLine("object {0},{1},{2}", obj.col1, obj.col2, obj.col3);
                    foreach (var detail in obj.details)
                    {
                        Console.WriteLine("\tdetails {0},{1}", detail.col4, detail.col5);
                            
                    }
                }
                    
                
                
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }

 

  • Like 1
  • Thanks 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 χρόνια αργότερα...

Καλησπέρα. Έιχα ανοίξει και άλλο θέμα και το είχα γράψει, κάνω και μια προσπάθεια εδω μηπως το δουν και άλλοι. Έχω ενα dataset απο το kaggle και πρέπει να βρω το h-index , τις ετεροαναφορές του, ποιός το έχει χρησιμοποιήσει, τι έργασία έκανε κτλ... , γιατί θέλω να δω αν μπορώ να το χρησιμοποιήσω στην διπλωματική μου και πρέπει να ενημερώσω τον καθηγητή. Έψαξα αρκετά αλλά δεν μπορώ να το βρω, πως δηλαδή μπορώ να εντοπίσω τις ετεροαναφορές για το dataset αυτό. Έχετε καμιά ιδέα? Ευχαριστώ πολύ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...