Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[c#] CSV naar object

Pagina: 1
Acties:

  • ieperlingetje
  • Registratie: September 2007
  • Niet online
Ik heb het volgende probleem, ik krijg een lijst aangeleverd in csv. Die ziet er zo uit

A,A1,AA1
A,A1, AA2
A,A2, AA1,
B,A1,AA1.

Die zou ik willen omzetten naar de volgende structuur:
A => [A1] => [AA1]
          => [AA2]

  => [A2] => [AA1]
B => [A1] => [AA1],

zodat ik makkelijk de data kan overzetten naar objecten.

Dit lijkt mij vrij triviaal, maar toch slaag ik er niet in om het correct te krijgen. Iemand een idee in welke richting ik moet zoeken? Ik kan via google alleen maar voorbeelden vinden in tegenovergestelde richting (array naar csv)

[ Voor 1% gewijzigd door RobIII op 24-04-2014 15:31 . Reden: [pre] tags toegevoegd voor leesbare structuur. ]

Tijdmachine | Nieuws trends


  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Je zegt het zelf al: CSV naar Object. Waarom arrays gebruiken als je ook gewoon objecten kunt gebruiken? Die stop je je in een Map of Dictionary of hoe dat in C# ook heten mag en dan kijk je tijdens het parsen van je CSV of je een object met die key al gehad hebt. Wat die objecten precies voorstellen, kan ik op basis van dit voorbeeld niet afleiden, dus daar moet je zelf even over nadenken.

En verder: laat even zien wat je al geprobeerd hebt (en gebruik daarbij code-tags).

"Any sufficiently advanced technology is indistinguishable from magic."


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dit moet je in ieder geval een aardig eind op weg helpen:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {

        var sep = new[] { ',' };

        var result = File.ReadAllLines(@"D:\foo.csv")
                        .Select(l => l.Split(sep))
                        .GroupBy(v => v[0].Trim(), StringComparer.OrdinalIgnoreCase);
    }
}

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ieperlingetje
  • Registratie: September 2007
  • Niet online
@RobIII, Bedankt voor de hint :), ik ga even verder zoeken.

Tijdmachine | Nieuws trends


  • Coca-Cola
  • Registratie: Maart 2001
  • Laatst online: 15:04
En anders heb je nog altijd de schitterende TextFieldParser in Microsoft.VisualBasic.FileIO. Dat is een complete CSV parser voor je (redelijk handig als je iets complexere CSV files hebt, al is het niet bepaald rocketscience om dat zelf te schrijven...)

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 12:22
Kijk eens naar de FileHelpers (http://filehelpers.sourceforge.net/), ook te verkrijgen via NuGet

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Coca-Cola schreef op donderdag 24 april 2014 @ 17:07:
En anders heb je nog altijd de schitterende TextFieldParser in Microsoft.VisualBasic.FileIO. Dat is een complete CSV parser voor je (redelijk handig als je iets complexere CSV files hebt, al is het niet bepaald rocketscience om dat zelf te schrijven...)
Dan heb je 't lezen van de CSV uit handen genomen maar heb je de grouping nog niet ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 20-11 12:36

ZaZ

Tweakers abonnee

RobIII schreef op vrijdag 25 april 2014 @ 15:51:
[...]

Dan heb je 't lezen van de CSV uit handen genomen maar heb je de grouping nog niet ;)
Je hebt wel meteen een zooi edge cases uit handen genomen. Zoals escaping van je delimiter indien die in de tekst voorkomt etc. Daarom lijkt imho een combi van de TextFieldParser met linq een goede oplossing

Lekker op de bank

Pagina: 1