我正在开发一个应用程序,它从特定目录中提取所有文件名列表,然后需要将文件名解析为多个变量,然后提交给数据库。
如何将字符串文件名解析为多个变量?
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
}
}
有更好的方法吗?
答案 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 '_'