Daten aus CSV in WF Anwendung anzeigen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Daten aus CSV in WF Anwendung anzeigen

    Hallo!

    Ich erhaltet aus einem SAP ERP System einen CSV Export, welcher pro Zeile
    - einen Stellplatz,
    - ein Kennzeichen, ob auf dem Stellplatz etwas eingelagert ist oder nicht und
    - noch weitere Daten
    enthält

    Insgesamt komm ich bei 20k Datensätzen auf gute 2MB. Ich kann zwei Spalten, die hauptsächlich aus Leerzeichen bestehen, aus dem Export entfernen, dann komm ich auf etwa 700 KB runter. Es ist geplant, dass alle 5-10 Sekunden so ein Export auf ein Laufwerk gestartet wird und mein Programm diese CSV ausliest und die Daten anzeigen soll.

    Nachdem ich seit gut 3 1/2 Jahren kein C# mehr programmiert habe, würde ich Euch fragen, was ich machen kann, um die Daten am effektivsten auszulesen.
    Meine Ideen Quick'n'Dirty und "Mit Kanonenkugel auf Spatzen schießen":
    - Im Programm ein Dictionary erstellen, CSV einlesen und im Programm darauf zugreifen
    - SQL Server verwenden, Daten aus CSV einlesen und dann per LINQ und EF darauf zugreifen

    Oder gibt es da noch bessere Vorschläge?
    Danke Euch schon mal!

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Per File.ReadAllText die csv einlesen
    die einzelnen werte erhält man mit hilfe einer Schleife und dort dann String.Split().

    Wie sollen die Daten denn angezeigt werden?
    SQL Server und das Entity Framework sind hier nicht von nöten.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Das ist auch bisserl heikel, weil wenn die schema.ini nicht alle Spaltentypen vorgibt, legt OleDb die Spaltentypen nach GutDünken fest.
    Dabei kann dann herauskommen, dass Werte nicht gelesen werden, weil sie zum nach GutDünken festgelegten Datentyp nicht passen.
    Also wenn mit OleDb csv eingelesen wird, dieses beachten:
    docs.microsoft.com/de-de/sql/o…ver?view=sql-server-ver15
    Danke Euch schon einmal für die Antworten!

    Leider muss ich zugeben, dass ich die Frage falsch gestellt habe. Mir ging es nicht um das Auslesen an sich, das mach ich, wie @mrMo schon geschrieben hat mit File.ReadAllText, bzw ich nehme System.IO.File.ReadAllLines(pfad), was mir ein Array von Zeilen liefert. Dieses verwandle ich dann mit LINQ in ein Dictionary, welches als Key den Lagerplatz und als Value ein Boolean enthält, was aussagt, ob der Platz belegt oder frei ist.

    Ich wollte eigentlich wissen, was die passenste "Datenhaltung" ist. Ob es bei diesen Mengen an Daten sinnvoll ist mit programminternen Listen zu arbeiten oder ob man hier schon "schwere Geschütze" auffahren sollte.
    Aber nachdem das Exportieren der Daten 1-2 Sekunden, das Einlesen der Daten in das C# Programm und die Anzeige jeweils <1 Sekunde brauchen und der Export alle 10 Sekunden daher kommt, hat sich das Thema eigentlich für mich erledigt.

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Alle 10 Sekunden eine CSV mit 20k Datensätzen exportieren ist jetzt nicht gerade die eleganteste Methode.
    Kannst du den Export nicht auf geänderte Records beschränken?
    Oder noch besser Direktabfrage der Lagerplätze über BAPI oder sonst eine SAP-Schnittstelle bei Bedarf.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Im Moment bekomme ich nur einen Export über einen Custom Report, der das Ergebnis als CSV auf ein Laufwerk schreibt. Hierzu wird die gesamte Lagerplatz-Tabelle exportiert. Wenn ich die Auswahl auf den Lagertyp, für den ich die Anzeige programmiere, einschränke, dann komm ich mit 7,7k Datensätze auf ~250kb Dateigröße.

    Im späteren Verlauf kann ich mir aber vorstellen, dass ich die Abfrage über BAPI machen kann.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell