Frage

Gibt es eine einfache Möglichkeit, einen String aus CSV-Format in eine Zeichenfolge [] oder Liste zu konvertieren?

Ich kann garantieren, dass es keine Kommas in den Daten.

War es hilfreich?

Lösung

string[] splitString = origString.Split(',');

(Nach Kommentar nicht von Original Beantworter hinzugefügt) Beachten Sie bitte, dass diese Antwort den speziellen Fall befasst, wo es garantiert sind keine Kommas in den Daten sein.

Andere Tipps

String.Split geht es einfach nicht schneiden, sondern ein Regex.Split kann - Versuchen Sie dieses:

using System.Text.RegularExpressions;

string[] line;
line = Regex.Split( input, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");

Wenn 'Input' ist die CSV-Zeile. Dies wird zitiert delimiters handhaben, und sollten Sie ein Array von Strings repräsentiert jedes Feld in der Zeile zurück geben.

Wenn Sie robusten CSV Handling wollen Besuche FileHelpers

Versuchen:

Regex rex = new Regex(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
string[] values = rex.Split( csvLine );

Quelle: http://weblogs.asp.net /prieck/archive/2004/01/16/59457.aspx

Sie können einen Blick nehmen Sie die Microsoft.VisualBasic Montage mit der

bei Verwendung
Microsoft.VisualBasic.FileIO.TextFieldParser

Es behandelt CSV (oder ein Trennzeichen) mit Anführungszeichen. Ich habe vor kurzem es ganz praktisch gefunden.

Es gibt keine einfache Möglichkeit, dies auch zu tun, wenn Sie zitierten Elemente mit eingebetteten Kommas berücksichtigen will, vor allem, wenn sie mit nicht genannten Bereichen gemischt werden.

Sie werden auch wahrscheinlich wollen die Zeilen in ein Wörterbuch konvertieren, durch die Spaltennamen eingegeben.

Mein Code, dies zu tun ist mehrere hundert Zeilen lang.

Ich denke, es gibt einige Beispiele auf dem Netz, Open-Source-Projekte, etc.

Versuchen Sie dies;

static IEnumerable<string> CsvParse(string input)
{
    // null strings return a one-element enumeration containing null.
    if (input == null)
    {
        yield return null;
        yield break;
    }

    // we will 'eat' bits of the string until it's gone.
    String remaining = input;
    while (remaining.Length > 0)
    {

        if (remaining.StartsWith("\"")) // deal with quotes
        {
            remaining = remaining.Substring(1); // pass over the initial quote.

            // find the end quote.
            int endQuotePosition = remaining.IndexOf("\"");
            switch (endQuotePosition)
            {
                case -1:
                    // unclosed quote.
                    throw new ArgumentOutOfRangeException("Unclosed quote");
                case 0:
                    // the empty quote
                    yield return "";
                    remaining = remaining.Substring(2);
                    break;
                default:
                    string quote = remaining.Substring(0, endQuotePosition).Trim();
                    remaining = remaining.Substring(endQuotePosition + 1);
                    yield return quote;
                    break;
            }
        }
        else // deal with commas
        {
            int nextComma = remaining.IndexOf(",");
            switch (nextComma)
            {
                case -1:
                    // no more commas -- read to end
                    yield return remaining.Trim();
                    yield break;

                case 0:
                    // the empty cell
                    yield return "";
                    remaining = remaining.Substring(1);
                    break;

                default:
                    // get everything until next comma
                    string cell = remaining.Substring(0, nextComma).Trim();
                    remaining = remaining.Substring(nextComma + 1);
                    yield return cell;
                    break;
            }
        }
    }

}
CsvString.split(',');

Get a string [] alle Zeilen:

string[] lines = System.IO.File.ReadAllLines("yourfile.csv");

Dann Schleife durch und teilen Sie diese Zeilen (diese fehleranfällig, weil es nicht für Kommas in quote-getrennte Felder nicht überprüft):

foreach (string line in lines)
{
    string[] items = line.Split({','}};
}
string s = "1,2,3,4,5";

string myStrings[] = s.Split({','}};

Beachten Sie, dass Split () nimmt eine array von Zeichen aufgeteilt auf.

Einige CSV-Dateien haben doppelte Anführungszeichen um die Werte zusammen mit einem Komma. Daher manchmal kann man auf dieser Zeichenfolge geteilt wörtlichen: „“

Eine CSV-Datei mit Zitat Feldern ist nicht eine CSV-Datei. Weit mehr Dinge (Excel) Ausgabe ohne Anführungszeichen anstatt mit Anführungszeichen, wenn Sie „csv“ in Speichern unter.

Wenn Sie einen wollen Sie verwenden können, frei, oder verpflichten, hier ist mir, dass auch IDataReader / Record tut. Es nutzt auch Datatable definieren / convert / erzwingen Spalten und DBNULL.

http://github.com/claco/csvdatareader/

Es ist nicht zitiert tun .. noch. Ich warf es nur zusammen vor ein paar Tagen einen Juckreiz zu kratzen.

Forgotten Semikolons: Nice Link. Vielen Dank. cfeduke: Danke für den Tipp zu Microsoft.VisualBasic.FileIO.TextFieldParser. Going in CsvDataReader heute Abend.

http://github.com/claco/csvdatareader/ aktualisiert TextFieldParser von cfeduke vorgeschlagen mit .

Nur ein paar Requisiten weg von Belichtungs Separatoren / trimspaces / Typ ig Sie nur Code benötigen, um zu stehlen.

Ich war schon auf Registerkarten aufgeteilt, so das der Trick für mich getan hat:

public static string CsvToTabDelimited(string line) {
    var ret = new StringBuilder(line.Length);
    bool inQuotes = false;
    for (int idx = 0; idx < line.Length; idx++) {
        if (line[idx] == '"') {
            inQuotes = !inQuotes;
        } else {
            if (line[idx] == ',') {
                ret.Append(inQuotes ? ',' : '\t');
            } else {
                ret.Append(line[idx]);
            }
        }
    }
    return ret.ToString();
}
string test = "one,two,three";
string[] okNow = test.Split(',');
separationChar[] = {';'}; // or '\t' ',' etc.
var strArray = strCSV.Split(separationChar);
string[] splitStrings = myCsv.Split(",".ToCharArray());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top