Я пытался прочитать некоторые CSV-файлы, хранящиеся в хранилище BLOB-объектов, а также добавить и заполнить два столбца. Я использую csvhelper для этого, но мне сложно изменить фактические строки.
Я хотел бы, чтобы этот процесс был динамическим, так как я буду перебирать пути контейнеров, и у меня нет под рукой структуры всех CSV-файлов.
using (StreamReader reader = new StreamReader(blob.OpenRead()))
using (CsvReader csv = new CsvReader(reader))
{
csv.Read();
csv.ReadHeader();
List<string> headers = csv.Context.HeaderRecord.ToList();
headers.Add("ColA");
headers.Add("ColB");
newHeaderContent = string.Join(",", headers);
// Not sure how to read through the csv and populate the two columns I just appended
}
using (StreamWriter writer = new StreamWriter(processedblob.OpenWrite()))
using (CsvWriter csvwriter = new CsvWriter(writer) )
{
writer.WriteLine(String.Concat(newHeaderContent));
//writer code for rows
}
@MightyBadaboom не может читать/перебирать существующие строки и добавлять 2 новых значения в конец каждой строки.





Согласно этому проблема, CsvHelper не поддерживает такую функцию редактирования. И еще он упоминает, что нужно 2 файла, прочитать из старого(а потом внести какие-то изменения), потом записать обновления в новый.
Код ниже работает и следует приведенным выше инструкциям:
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
using System.IO;
using System.Text;
namespace AzureBlobConsole
{
class Program
{
static void Main(string[] args)
{
CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials("your_storage_account", "storage_account_key"), true);
CloudBlobClient client = storageAccount.CreateCloudBlobClient();
CloudBlobContainer blobContainer = client.GetContainerReference("f11");
CloudBlockBlob blob = blobContainer.GetBlockBlobReference("t2.csv");
//download the .csv file into a text
string s1 = blob.DownloadText();
//split the text into an array
string[] temp = s1.Split('\r');
// variable s used to store the updated text from .csv
string s = "";
//because the last element of the array is redundant data("\n"), so we use temp.Length-1 to abandon it.
for (int i=0;i<temp.Length-1;i++)
{
if (i == 0)
{
temp[i] += ",ColA,ColB"+"\r\n";
}
else
{
temp[i] += ",cc,dd"+"\r\n";
}
s += temp[i];
}
//upload the updated .csv file into azure
var stream = new MemoryStream(Encoding.UTF8.GetBytes(s));
blob.UploadFromStream(stream);
Console.WriteLine("completed.");
Console.ReadLine();
}
}
}
Результат испытаний:
Перед обновлением:
После обновления:
Спасибо @Иван. В итоге я загружался в таблицу данных и выполнял там манипуляции, но это более элегантно. Благодарить
А в чем твоя проблема?