Как преобразовать строку в код C# в SELECT из C# LINQ
Я пытаюсь переупорядочить / переупорядочить CSV-файл через LINQ. После того, как я рассчитал расположение столбцов, мне нужно создать новый 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) столбцы no.of довольно громадны, и расположение принимается динамически (positionArray[]), поэтому расположение столбцов после части SELECT генерируется в строке. 'count' - это номер колонки здесь.
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;
}
Я не могу использовать 'selectCol ' в части SELECT, поскольку он генерирует файл с помощью x[someNumber].
Как мне преобразовать строку 'selectCol ', чтобы она дала мне желаемый результат?
Есть ли другая альтернатива этому?
2 ответа
Я надеюсь, что я правильно понимаю проблему. Но вот другой способ достижения того, что вы хотите.
//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);