我正在阅读包含
等行的文件pathName; additionalString; maybeSomeNumbers
我用
阅读var lines = File.ReadAllLines(fileListFile);
var fileListEntries = from line in lines
where !line.StartsWith("#")
select line.Split(';').ToArray();
到目前为止效果很好。但是,我想更改pathName
中的驱动器号。我可以将fileListEntries
转换为数组并循环遍历元素[i][0]
,但有没有办法可以直接对集合执行此操作?
答案 0 :(得分:1)
我认为你可以使用LINQ进行内联。
File.ReadAllLines()
返回一个字符串数组,因此您应该能够从集合中Replace()
执行line
。
var replace = "The string to replace the drive letter";
var lines = File.ReadAllLines(fileListFile);
var fileListEntries = from line in lines
where !line.StartsWith("#")
select (line.Replace(line[0], replace).Split(';')).ToArray();
答案 1 :(得分:1)
使用LINQ扩展方法语法,以便能够在lambda表达式中使用代码块{ ... }
。如果您这样做,则必须包含明确的return
- 声明。
var fileListEntries = lines
.Where(l => !l.StartsWith("#"))
.Select(l => {
string[] columns = l.Split(';');
if (Path.IsPathRooted(column[0])) {
string root = Path.GetPathRoot(columns[0]);
columns[0] = Path.Combine(@"X:\", columns[0].Substring(root.Length));
}
return columns;
})
.ToArray();
答案 2 :(得分:0)
你可以在你的选择中调用一个方法,以你想要的方式修改文本。
static void Main(string[] args)
{
var fileListEntries = from line in lines
where !(line.StartsWith("#"))
select ( ModifyString(line));
}
private static string[] ModifyString(string line)
{
string[] elements = line.Split(';');
elements[0] = "modifiedString";
return elements;
}
答案 3 :(得分:0)
lines.Where(l => !l.StartsWith("#").
Select(l => string.Concat(driveLetter, l.Substring(1))).
Select(l => l.Split(';');