简体   繁体   中英

Verifying and parsing csv to 2D array in C# Visual Studios

Just trying out C# to make a button that loads csv files verify them and parse them:

protected void Upload_Btn_Click(object sender, EventArgs e)
{
    string test = PNLdataLoader.FileName;
    //checks if file is csv
    Regex regex = new Regex("*.csv");
    Match match = regex.Match(test);
    if (match.Success)
    {
        string CSVFileAsString = System.Text.Encoding.ASCII.GetString(PNLdataLoader.FileBytes);
        System.IO.MemoryStream MS = new System.IO.MemoryStream(PNLdataLoader.FileBytes);
        System.IO.StreamReader SR = new System.IO.StreamReader(MS);
        //Store each line in CSVlines array of strings
        string[] CSVLines = new string[0];
        while (!SR.EndOfStream)
        {
            System.Array.Resize(ref CSVLines, CSVLines.Length + 1);

            CSVLines[CSVLines.Length - 1] = SR.ReadLine();

        }
    }

So far I got it to store the lines in CSVLines but I am not sure what is wrong with the regex. Is there a more efficient way to do this?

That isn't a valid expression, its saying match whatever character that comes before * 0 or more times, since there is no character before that there is a problem.

This will probably match most things, it does not include special characters.

Regex regex = new Regex("[a-zA-Z0-9]{1,}.csv"); 

You could also do this instead:

if(test.EndsWith(".csv"))

and lastly, I would change your array to a List<T> or something like that, futher explained here: What is more efficient: List<T>.Add() or System.Array.Resize()?

//Store each line in CSVlines array of strings
List<string> CSVLines = new List<string>();
while (!SR.EndOfStream)
{
    CSVLines.Add(SR.ReadLine());

}

EDIT: List<T> is in System.Collections.Generic

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM