[英]How to convert a string to C# code in the SELECT of C# LINQ
我正在嘗試通過LINQ重新排列/重新排列csv文件。 計算完列的排列后,需要在該排列中創建一個新的csv文件。
參考: https : //msdn.microsoft.com/en-us/library/bb546155.aspx
我正在使用類似的代碼編寫一個新文件(在這種情況下:3列):
IEnumerable<string> queryLINQ =
from line in lines
let x = line.Split(',')
select x[3],x[1],x[2];
但是,在問題(80)中列號非常安靜,並且以動態方式接收位置排列(positionArray []),因此在字符串中生成了SELECT部分之后的列排列。 “計數”是此處的列數。
string selectCol = "";
for (int k = 0; k < count; k++)
{
string col;
if(k+1<count)
{
col= "x[" + positionArray[k] + "],";
}
else
{
col= "x[" + positionArray[k] + "]";
}
selectCol += piece;
}
我無法在SELECT部分使用'selectCol',因為它正在使用x [someNumber]生成文件。
如何轉換'selectCol'字符串,以便它給我想要的結果?
除此之外,還有其他選擇嗎?
我希望我能正確理解問題。 但是,這是實現您想要的目標的另一種方式。
//assuming this is the new order of columns you want
int[] positionArray = {2, 1, 0};
string[] lines = System.IO.File.ReadAllLines(@"c:\temp\testcsv.csv");
var newLines = lines.Select(p =>
{
var columns = p.Split(',');
var sb = new StringBuilder();
foreach (var i in positionArray)
{
if (sb.Length > 0)
{
sb.Append(",");
}
sb.Append(columns[i]);
}
return sb.ToString();
}).ToArray();
System.IO.File.WriteAllLines(@"c:\temp\testcsv2.csv", newLines);
Console.WriteLine("Spreadsheet2.csv written to disk. Press any key to exit");
Console.ReadKey();
通過尊重@ Captain0(其他答案),我為您提供了Linq
方法。
在positionArray
指定列順序,您將獲得所需的順序。
int[] positionArray = { 2, 1, 0 };
var flines = File.ReadAllLines(@"c:\temp\testcsv.csv");
var arranged = flines.Select(line => line.Split(','))
.Select(x => string.Join(",", x.Select((s, i) => x[positionArray[i]])))
.ToList();
您可以使用File.WriteAllLines
將已安排的行寫入新文件。
File.WriteAllLines(@"c:\temp\testcsv2.csv", arranged);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.