Laden...

C# Console - CSV Datei nach werte suchen und ganze Zeilen löschen.

Erstellt von RevangeXX vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.807 Views
R
RevangeXX Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren
C# Console - CSV Datei nach werte suchen und ganze Zeilen löschen.

Hallo,

ich würde gerne folgendes mittels einer C# Consolen Anwendung lösen:

Ich habe eine .CSV Datei mit mehreren Spalten. In der Spalte C steht eine Nummer z.B. 185032.

Jetzt würde ich gerne alle Zeilen in dieser CSV Datei löschen bei denen die Nummer in Spalte C kleiner als z.B. 185000 ist.

Ich habe mich schon über Regex informiert, bin aber nicht ganz sicher ob es nicht eventuell eine einfachere Lösung gibt?

LG RevangeXX

16.806 Beiträge seit 2008
vor 5 Jahren

Gibt doch tausende an CSV-Bibliotheken - und dann eben noch selbst geschriebener Code.
Probier doch erst mal was aus - Du bist doch Entwickler 😉

R
RevangeXX Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren

Hallo,

ich hab schon nach Lösungen gesucht die aber bisher leider nicht wirklich funktioniert haben.

LG

16.806 Beiträge seit 2008
vor 5 Jahren

Dann bin ich ehrlich und direkt und sage, dass Du nicht richtig geschaut hast.

5.657 Beiträge seit 2006
vor 5 Jahren

Hi RevangeXX,

was hast du denn schon probiert, und was hat dabei nicht funktioniert wie gewünscht?

Weeks of programming can save you hours of planning

R
RevangeXX Themenstarter:in
5 Beiträge seit 2018
vor 5 Jahren

Dann erklär mir doch bitte, nach was ich genau suchen soll?

Bei den meisten Treffern geht es nur um VBA oder um was komplett anderes.

Wie ich Zeilen aus einer CSV Datei lösche hab ich schon gefunden und ist auch nicht so schwer, nur wie ich den Wert einer bestimmten Spalte auslese hab ich bisher nicht gefunden / verstanden.

Wenn ich Beispielsweise nach "c# csv spalte wert auslesen" Suche kommen bei mir keine Treffer, die mir weiterhelfen.

LG

2.298 Beiträge seit 2010
vor 5 Jahren

Hallo,

lese die CSV Datei in eine intelligent gewählte Datenstruktur (je nach vollständigem Aufbau und ggf. Änderungen eine Klasse oder direkt ein DataTable) ein. Dafür suchst du nach "C# read CSV File". Anschließend durchsuchst du die Daten.

Danach löschst du eben alle Einträge die weg sollen und schreibst die CSV-Datei zurück auf das Filesystem.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

16.806 Beiträge seit 2008
vor 5 Jahren

Wenn ich Beispielsweise nach "c# csv spalte wert auslesen" Suche kommen bei mir keine Treffer, die mir weiterhelfen.

Wenn ich danach suche, dann würde ich auch nichts finden - so funktioniert aber halt auch Google nicht wirklich. - vor allem in der Software Entwicklung nicht, in der man eher Englisch spricht 😉
Eine Suche nach übertragen "wie lese ich eine spalte mit c# aus, die aus einer CSV kommt" ist halt auch nicht hilfreich.

Eine CSV ist nichts anderes Menge von Zeilen mit mehreren Spalten.
Ergo, wenn man kurz nachdenkt und gedanklich überträgt, liest man eine CSV eben auch als Liste mit Werten ein - alles andere sind C# Grundlagen, wie man mit Listen und Variablen umgeht.

Hilfe zur Selbsthilfe:
Was Du wissen willst ist also eine Suche nach "c# read csv" - alles andere ist einfach Programmieren. Mit grundlegenden C# Bausteinen: Abfragen, Variablen, Schleifen.
Deswegen bist Du Entwickler: um selbst ein wenig nachzudenken und auch selbst Code zu schreiben.

Wenn Dir jetzt jemand den Code gibt, dann ist Dir auch nicht geholfen.
Dann hast Du Code, den Du nicht verstehst und beim nächsten Mal stehst Du wieder fragend vor dem nächsten Problem.

Edit: genau das von LaTino ist nun evtl. die Lösung, aber nicht hilfreich.

3.003 Beiträge seit 2006
vor 5 Jahren

using (var reader = new StreamReader(File.OpenRead("input.csv")))
using (var writer = new StreamWriter(File.OpenWrite("output.csv")))
{
    string currentLine;
    while ((currentLine = reader.ReadLine()) != null)
    {
        if (CsvModel.FromLine(currentLine).IsValid(185000))
        {
            writer.WriteLine(currentLine);
        }
    }
}

public class CsvModel
{
    private readonly int _valueOfInterest;

    private CsvModel(int valueOfInterest)
    {
        _valueOfInterest = valueOfInterest;
    }

    public bool IsValid(int check) => check >= _valueOfInterest;

    public static CsvModel FromLine(string line)
    {
        int valueOfInterest = ??? //...denk dir was aus, du bist der Programmierer
        return new CsvModel(valueOfInterest);
    }
}

Mal eingedampft auf dein eigentliches Problem. Um den Wert aus einer einzelnen Zeile zu extrahieren, hast du ungefähr drölf Fantastilliarden Möglichkeiten. Such dir eine aus.

Viel Spaß,

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

C
2.121 Beiträge seit 2010
vor 5 Jahren

War nicht kürzlich ein Thema, wie komplex man einem blutigen Anfänger antworten sollte?
Ich erlaube mir etwas verständlicheres zu bringen um zunächst überhaupt zu verstehen was da passieren muss. (Sorry... und um auf das eigentliche Problem einzugehen, statt auf ein Grundgerüst das um die Lösung herumgebaut werden kann aber nicht muss)


string[] lines = File.ReadAllLines(...);
List<string> remainingLines = new List<string>;
foreach (string line in lines)
{
  string[] elements = String.Split(...); < anschauen !!!
  if (elements[...] erfüllt Bedingung)
    remainingLines.Add(line);
}
File.WriteAllLines(...);

3.003 Beiträge seit 2006
vor 5 Jahren

Nunja, "das eigentliche Problem" hast du insofern näher umrissen, dass du string.Split() vorschlägst. Das drumherum ist völlig nebensächlich - ob man jetzt direkt auf der Zeichenkette arbeitet oder im vorauseilenden Gehorsam auf zukünftige weitere Anforderungen die Zeile in ein Objekt parst...ich hab letzteres gewählt, weil ersteres potenziell Spaghetti wird. Gemein ist den Lösungen, dass RevangeXX sie getrost ignorieren kann, weil sie nicht das eigentliche Problem ansprechen (CSV-Zeile -> auswerten). (Und wieso so spitz? Der Code ist nicht wirkich komplex.

@RevangeXX:

  • regex (sicherlich zu bevorzugen)
  • string.split (schön einfach)
  • substring (wenn die Felder immer geich lang sind oder man gern frickelt)
  • parsen (wenn du Informatikstudent bist)
    ...

Für das Drumherum - Datei lesen, CSV-Zeilen lesen, Datei schreiben - gibt's wieder zig Möglichkeiten. Frag zwei Programmierer, und du kriegst drei Möglichkeiten.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

C
2.121 Beiträge seit 2010
vor 5 Jahren

Spitz? Wollte ich nicht sein tut mir leid. Ich versuche immer mich selbst vorzustellen, als ich die Programmierer Denkweise noch nicht verinnerlicht hatte. Da hätte ich mir sicher gedacht.

Oh eine extra Klasse. Ich hätte ein if genommen, geht das denn nicht? Man braucht eine ganze Klasse dafür... warum wohl?

Ein => in einer Methode? Nein das sieht nicht aus wie eine Methode? Was ist es dann? Soll ich das jetzt tatsächlich auch noch hier fragen? Die glauben ja ich weiß gar nichts.

Wie ich den Wert aus csv herausbekomme weiß ich noch immer nicht aber der ganze Rest den ich mir vorstellte war auch noch falsch. Lieber Himmel ...

Wär doch schade.