Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从CSV文件读取并存储到阵列_C# - Fatal编程技术网

C# 从CSV文件读取并存储到阵列

C# 从CSV文件读取并存储到阵列,c#,C#,你能帮我拿C#吗。 我试图在C#中创建一个函数,用于打开CSV文件并将其保存到数组中: FileStream fileStream = new FileStream(guid.ToString(), FileMode.Open); for (int i = 1; i > 200; i++) // it checks the first 200 lines { int j = 0; string[] str = new string[j]; do {

你能帮我拿C#吗。 我试图在C#中创建一个函数,用于打开CSV文件并将其保存到数组中:

FileStream fileStream = new FileStream(guid.ToString(), FileMode.Open);
for (int i = 1; i > 200; i++) // it checks the first 200 lines
{
    int j = 0;
    string[] str = new string[j];
    do
    {                
        // saving each character to the variable until comma is found

    } while(str == '\n'); // read each character in a for loop until new line character found
}

您能帮我一下吗?

您可以使用string.Split(',')扩展名方法

using (StreamReader streamReader = new StreamReader(File.OpenRead(guid.ToString())))
{
    for (int i = 0; i <= 200; ++i)
    {    
        string[] str = streamReader.ReadLine().Split(',');
    }
}
使用(StreamReader StreamReader=newstreamreader(File.OpenRead(guid.ToString()))
{
对于(inti=0;i

string[] lines = File.ReadAllLines(path);
if(lines.Length >= 200){
    for(int i = 0; i < 200; i++){
          string[] str = lines[i].Split(',');
          //do something here
    }
}
string[]line=File.ReadAllLines(路径);
如果(lines.Length>=200){
对于(int i=0;i<200;i++){
字符串[]str=行[i]。拆分(',');
//在这里做点什么
}
}
类似这样的内容:

using (StreamReader r = new StreamReader(guid.ToString()))
{
    string line;
    int linesCount;
    ArrayList result = new ArrayList();
    while ((line = r.ReadLine()) != null && linesCount++ <= 200)
    {
         result.AddRange(line.Split(','));
    }
}
使用(StreamReader r=newstreamreader(guid.ToString()))
{
弦线;
国际线路公司;
ArrayList结果=新建ArrayList();

而((line=r.ReadLine())!=null&&lineScont++手动解析CSV实际上相当棘手。您最好重用
TextFieldParser
(添加对
Microsoft.VisualBasic
程序集的引用)

使用Microsoft.VisualBasic.FileIO;
....
字符串[,]parsedCsv;
List csvLines=新列表();
TextFieldParser parser=newtextfieldparser(新文件流(guid.ToString(),FileMode.Open));
paraser.Delimiters=新字符串[]{“,”};
parser.TextFieldType=FieldType.Delimited;
int maxLines=200,lineCount=0;
尝试
{
而(!parser.EndOfData&&lineCount++
我在这里假设输出将是一个二维字符串数组-您可能需要根据您所追求的内容调整此代码,特别是如果您必须处理每行字段数不相同的情况(可能不太可能,但仍然如此)


TextFieldParser
真正有用的地方是它可以处理不同类型的delimeters;
,例如,这段代码可以解析制表符分隔的文本。

您可以通过从VisualBasis.Net程序集中“借用”一个很好的实现来作弊:如果您自己做的话,请小心,csv文件中有一些特殊字符。既然LINQ对.Split()做得这么好,为什么还要麻烦呢扩展名?@JesseCarter尝试用.Split()解析
“a,b,c,\'x,y,z\”“
”你会明白我的意思。这很公平,但我们没有理由相信他的文件是这样设置的。我所见过的大多数CSV文件每行都有一个CSV条目,可以很容易地使用字符串进行解析。分隔符上的拆分这是非常正确的,但对格式进行这些假设是有风险的,尤其是鉴于CSV格式比大多数人想象的要复杂。例如,任何依赖于
ReadLine
的内容都是脆弱的,因为引用的CSV字段可能包含换行符。
using Microsoft.VisualBasic.FileIO;

....

string[,] parsedCsv;
List<string[]> csvLines = new List<string[]>();
TextFieldParser parser = new TextFieldParser(new FileStream(guid.ToString(), FileMode.Open));
parser.Delimiters = new string[] { "," };
parser.TextFieldType = FieldType.Delimited;
int maxLines = 200, lineCount = 0;

try
{
    while (!parser.EndOfData && lineCount++ < maxLines)
    {
        csvLines.Add(parser.ReadFields());
    }
}
catch (MalformedLineException)
{
    Console.WriteLine("Line Number: {0} Value: {1}", parser.ErrorLineNumber, parser.ErrorLine);
    return;
}

parsedCsv = new string[csvLines.Count, csvLines[0].Length];

for (int i = 0; i < csvLines.Count; i++)
{
    for (int j = 0; j < csvLines[i].Length; j++)
    {
        parsedCsv[i, j] = csvLines[i][j];
    }
}