将字符串解析为多个变量

时间:2015-01-20 20:06:16

标签: c# mysql arrays string parsing

我正在开发一个应用程序,它从特定目录中提取所有文件名列表,然后需要将文件名解析为多个变量,然后提交给数据库。

如何将字符串文件名解析为多个变量?

EX文件:

2014_31_12_09_36AM_15555555555_108

2014_31_12_09_39AM_108_15555555555

2014_31_12_09_17AM_102_108

文件名包含年,日,月,小时,分钟(上午/下午),3位或11位数字,后跟另外3位或11位数字

扫描目录后,所有文件名都存储在数组中。

private void ParseFileNames()
    {
        string Year = "";
        string Day = "";
        string Month = "";
        string Hour = "";
        string Minute = "";
        string Called = "";
        string Calling = "";

        //Loop through scanned file names and parse them one at a time.
        for (int i = 0; i < fileNames.Length; i++)
        {
            string[] parsedFileName = fileNames[i].Split('_');
            Year = parsedFileName[0];
            Day = parsedFileName[1];
            Month = parsedFileName[2];
            Hour = parsedFileName[3];
            Minute = parsedFileName[4];
            Called = parsedFileName[5];
            Calling = parsedFileName[6];

            //open DB connection and submit each individual parsed file data into DB

            //Move file from toIndexPath to IndexedPath
        }
    }

有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

你可以回复这样的课程

public class FileData
{
    public int Year {get;set;}
    public int Day  {get;set;}
    public int Month  {get;set;}
    public int Hour  {get;set;}
    public int Minute  {get;set;}
    public int Called  {get;set;}
    public int Calling  {get;set;}

    public FileData(string[] parsedInfo)
    {
        Year = Convert.ToInt32(parsedInfo[0]);
        // and so on with other member to load
    }
}

然后只需调用以下内容即可获得List<FileData>

var listFileData = fileNames.Select(fn=> new FileData(fn.Split('_'))).ToList();

答案 1 :(得分:0)

此代码较短,我不知道更好,但至少你得到一个日期时间

    //This code is just for testing the strings,  delete these 4 after testing.
    var stringList = new List<string>();
    stringList.Add("2014_31_12_09_36AM_15555555555_108");
    stringList.Add("2014_31_12_09_39AM_108_15555555555");
    stringList.Add("2014_31_12_09_17AM_102_108");

    var allFileDate = new List<FileData>();
    foreach (var item in stringList)
    {
        var dt = item.Split('_');
        var timeCombined = string.Concat(dt[2], "/", dt[1],"/", dt[0]," ", dt[3], ":", dt[4]);
        allFileDate.Add(new FileData {Date = Convert.ToDateTime(timeCombined), Called = dt[5], Calling = dt[6]});
    }

和你的班级

    public class FileData
    {
        public DateTime Date { get; set; }
        public string Called { get; set; }
        public string Calling { get; set; }    
    }

那里的所有数据验证都没问题。

答案 2 :(得分:0)

  

有更好的方法吗?

'更好'是非常主观的。总有一种更好的方式取决于你想要什么。在你的情况下,我根本不会编写代码来解析你的文件名,而且你要进行大量的往返行程,一次一行填充你的表。

我只想使用批量加载命令,例如:LOAD DATA ... INTO TABLE ... LINES TERMINATED BY '\r\n' FIELDS TERMINATED BY '_'