Lea un archivo CSV en una matriz usando C#

Estoy tratando de escribir un código que extraerá, leerá y separará un archivo csv. Tiene cuatro columnas sin títulos. He estado buscando durante horas en línea y nadie parece tener la respuesta, así que espero que alguien aquí pueda. Después de leerlo, necesito que se pueda extraer de manera muy específica, ya que es parte del diseño. ¡Gracias de antemano!

preguntado el 24 de agosto de 12 a las 04:08

Mire CSVHelper si necesita analizar en entidades. Está en Nuget o aquí: github.com/JoshClose/CsvHelper -

@SimonWhitehead Así es como se ve mi csv. Quiero colocar cada línea en una matriz que tenga 1 (el número atómico) y 1.007.... (la masa atmosférica) todos llamables por separado. Estoy tratando de armar una especie de tabla periódica. 1,1.0079400000,Hidrógeno,H 2,4.0026020000,Helio,He 3,6.9410000000,Litio,Li 4,9.0121820000,Berilio,Be -

Aparecen nuevas líneas después de cada símbolo atómico. -

3 Respuestas

Tu pregunta es un poco vaga, pero intentaré responderla lo mejor que pueda.

Un archivo CSV es (por definición) un archivo que contiene valores separados por comas; la clave aquí es que se usa una coma como delimitador. Personalmente, encuentro que usar un delimitador diferente es menos desagradable al analizar.

Creé el siguiente archivo CSV de prueba:

Column1,Column2,Column3,Column4
Row1Value1,Row1Value2,Row1Value3,Row1Value4
Row2Value1,Row2Value2,Row2Value3,Row2Value4
Row3Value1,Row3Value2,Row3Value3,Row3Value4
Row4Value1,Row4Value2,Row4Value3,Row4Value4
Row5Value1,Row5Value2,Row5Value3,Row5Value4

Aquí hay un código para leer ese archivo en algunas estructuras simples que luego puede manipular. Es posible que desee ampliar este código creando clases para las columnas y filas (y valores también).

        string sFileContents = "";

        using (StreamReader oStreamReader = new StreamReader(File.OpenRead("Test.csv")))
        {
            sFileContents = oStreamReader.ReadToEnd();
        }

        List<string[]> oCsvList = new List<string[]>();

        string[] sFileLines = sFileContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
        foreach (string sFileLine in sFileLines)
        {
            oCsvList.Add(sFileLine.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
        }

        int iColumnNumber = 0;
        int iRowNumber = 0;

        Console.WriteLine("Column{0}, Row{1} = \"{2}\"", iColumnNumber, iRowNumber, oCsvList[iColumnNumber][iRowNumber]);

        iColumnNumber = 4;
        iRowNumber = 2;

        Console.WriteLine("Column{0}, Row{1} = \"{2}\"", iColumnNumber, iRowNumber, oCsvList[iColumnNumber][iRowNumber]);

Tenga en cuenta que se accede a los valores por el número de columna y luego por el número de fila.

Espero que esto ayude.

Respondido 24 ago 12, 06:08

Así es como se ve mi csv. Quiero colocar cada línea en una matriz que tenga 1 (el número atómico) y 1.007.... (la masa atmosférica) todos llamables por separado. Estoy tratando de armar una especie de tabla periódica. 1,1.0079400000,Hidrógeno,H 2,4.0026020000,Helio,He 3,6.9410000000,Litio,Li 4,9.0121820000,Berilio,Be - rreichel

Hay una nueva línea que comienza después de cada símbolo atómico. - rreichel

Muy bien, solo intenté implementar su bloque de código y no me dio ningún error, sin embargo, no puedo llamar al nombre de la lista de arreglos (oCsvList) desde fuera de la lectura (específicamente tratando de llamarlo desde un bucle for .- rreichel

Hola, no estoy seguro de lo que quieres decir. ¿Es posible pegar tu código aquí, por favor? - rastus7

Todo lo que necesita hacer es simplemente convertirlo en una matriz de bytes [] y nuevamente en una cadena [¿constructor?]. Luego, separe cada entrada y analícela así.

http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Convert-file-to-byte-array.html

Y para convertir a una cadena:

    // C# to convert a byte array to a string.
byte [] dBytes = ...
string str;
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
str = enc.GetString(dBytes);

Tienes que entender que necesitas hacer un analizador. Hice uno para extraer acciones de Yahoo, básicamente dividiendo los dos puntos en datos.

Respondido 24 ago 12, 06:08

Esta es una forma mucho más sencilla de hacer lo que quieras.

var lineCount = File.ReadLines(@"C:\file.txt").Count();
var reader = new StreamReader(File.OpenRead(@"C:\location1.csv"));
int[,] properties = new int[lineCount,4];
for(int i2 = 0; i2 < 4; i2++)
{
    for(int i = 0; i < lineCount; i++)
    {
        var line = reader.ReadLine();
        var values = line.Split(';');
        properties[i,i2] = Convert.ToInt32(values[i2];
    }
}

Respondido el 06 de diciembre de 17 a las 01:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.