Linq 领料ID';这是一个文件
我有一个日志文件(.txt),其中包含以下信息:Linq 领料ID';这是一个文件,linq,c#-4.0,Linq,C# 4.0,我有一个日志文件(.txt),其中包含以下信息: Filename1 - A3332NCDER Filename2 - B3332NCDER Filename3 - B1222NCDERE Filename4 - C1222NCDER Filename4 - C1222NCDERE using (StreamWriter logFile = new StreamWriter(logFileName, true)) { logFile.WriteLine(fileName +
Filename1 - A3332NCDER
Filename2 - B3332NCDER
Filename3 - B1222NCDERE
Filename4 - C1222NCDER
Filename4 - C1222NCDERE
using (StreamWriter logFile = new StreamWriter(logFileName, true))
{
logFile.WriteLine(fileName + " - " + fileID);
}
我正在将文件名和相应的ID写入日志文件,如下所示:
Filename1 - A3332NCDER
Filename2 - B3332NCDER
Filename3 - B1222NCDERE
Filename4 - C1222NCDER
Filename4 - C1222NCDERE
using (StreamWriter logFile = new StreamWriter(logFileName, true))
{
logFile.WriteLine(fileName + " - " + fileID);
}
稍后要获取ID,我将执行以下操作:
char[] delimiters = new char[]{'\n','\r','-'};
IList<string> fileIDs = File.ReadAllText(logFileName)
.Split(delimiters, StringSplitOptions.RemoveEmptyEntries)
.Where((lineItem, index) => index % 2 == 1)
.Select(lineItem => lineItem.Trim())
.ToList();
我需要从上面的数据中选择IList中的ID?我可以想到的一种方法是先按\n拆分,然后删除空行&包含日期的行。然后再次以“-”分隔,然后将ID添加到列表中。是否可以使用单个linq查询执行此操作这可能是正则表达式的一个很好的应用程序,具体取决于您对文件名的控制程度。但是,任何使用“String.Split”的方法也不适用于包含破折号的文件名 表情
(?<=- *|,)[A-Z0-9]+
(?使用Linq的方法可以是:
List<string> ids = File.ReadAllLines(logFile)
.Where(l => !String.IsNullOrWhiteSpace(l)) // Trim empty lines
.Where(l => l.StartsWith("Filename")) // Just get ID lines
.SelectMany(l => l.Split('-').Skip(1)) // Skip the "FilenameX" section
.SelectMany(ids => ids.Split( // Get IDs (+trim)
new[]{' ',','}, StringSplitOptions.RemoveEmptyEntries)
)
.ToList();
List id=File.ReadAllLines(日志文件)
.Where(l=>!String.IsNullOrWhiteSpace(l))//修剪空行
.Where(l=>l.StartsWith(“Filename”)//只需获取ID行
.SelectMany(l=>l.Split('-')。跳过(1))//跳过“FilenameX”部分
.SelectMany(id=>ids.Split(//获取id(+trim)
新[]{“”,','},StringSplitOptions.RemoveEmptyEntries)
)
.ToList();
StartsWidth(“文件名”)
看起来不是很灵活。也许“!StartsWidth(“****””)会更好。@Jens:这确实取决于文件输出格式……使用我的方法有一个优点,就是忽略将来的任何附加行,前提是“数据总是使用相同的模式写入。不过,这两种模式都适用于此数据集。