Оказывается, что у меня есть необходимость производить файл, разграниченный точками с запятой со списка объектов.
Серьезная мой класс:
public class RipsUS
{
public string TipoIdUsuario { get; set; }
public string NumIdUsuario { get; set; }
public string CodEntAdm { get; set; }
public int TipoUsuario { get; set; }
public string PrimApeUsuario { get; set; }
public string SegApeUsuario { get; set; }
public string PrimNomUsuario { get; set; }
public string SegNomUsuario { get; set; }
public int Edad { get; set; }
public int UnidadMedidaEdad { get; set; }
public string Sexo { get; set; }
public string CodDepartamento { get; set; }
public string CodMunicipio { get; set; }
public string Zona { get; set; }
}
Я верю в список объектов этого класса
List<RipsUS> listaRipsUs = new List<RipsUS>();
Уже у меня есть список с нагруженными данными, но сейчас я не знаю, как делать, чтобы производить файл, разграниченный точкой с запятой.
Если тебя не беспокоит использовать стандартный формат CSV, ты можешь использовать уже существующие книжные магазины, чтобы манипулировать чтением и написанием твоей структуры. Таким образом, ты предотвращаешь проблемы в ситуациях, где у твоей стоимости есть точка с запятой, и т.д.
Пример одной освободил бы простая, который ты можешь тестировать, именно, CsvHelper ты можешь загружать из-за NuGet. Кажется, что несколько человек это используют. Это хорошее, так как он показывает, что оно функционирует хорошо, и вероятно уже были исправлены потенциальные недостатки.
Используя твой класс RipsUS
, здесь у тебя есть пример того, как ты можешь писать в файл и потом читать это правильно, даже если ты использовал символы как ;
или ,
.
Код:
public static void Main()
{
var list = new List<RipsUS>();
list.Add(new RipsUS { TipoIdUsuario = "zona", Edad = 56 });
list.Add(new RipsUS { TipoIdUsuario = "ID", Edad = 100 });
list.Add(new RipsUS { TipoIdUsuario = "ID,a;t\"hola;", Edad = 100 });
// Test de escritura al archivo.
using (var fileWriter = new StreamWriter(File.OpenWrite(@"d:\test\test.csv"), Encoding.UTF8))
using (var csvWriter = new CsvWriter(fileWriter))
{
csvWriter.WriteRecords(list);
}
// Test de lectura del archivo.
using (var fileReader = new StreamReader(File.OpenRead(@"d:\test\test.csv"), Encoding.UTF8))
using (var csvReader = new CsvReader(fileReader))
{
foreach (var record in csvReader.GetRecords<RipsUS>())
{
Console.WriteLine(record.TipoIdUsuario);
}
}
}
Оказанный консолью:
zona
ID
ID,a;t"hola;
Контент файла:
TipoIdUsuario,NumIdUsuario,CodEntAdm,TipoUsuario,PrimApeUsuario,SegApeUsuario,PrimNomUsuario,SegNomUsuario,Edad,UnidadMedidaEdad,Sexo,CodDepartamento,CodMunicipio,Zona
zona,,,0,,,,,56,0,,,,
ID,,,0,,,,,100,0,,,,
"ID,a;t""hola;",,,0,,,,,100,0,,,,
Как альтернатива в ответ @lois6b, ты можешь использовать Reflection , чтобы производить файл CSV, что-либо подобное:
public void ACsv(string pathFichero)
{
StringBuilder lineas = new StringBuilder();
FieldInfo[] fields = typeof(RipsUS).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
bool newline = true;
foreach (object o in listaRipsUs)
{
foreach (var f in fields)
{
if (newline)
newline = !newline;
else
lineas.Append(";");
var x = f.GetValue(o);
if (x != null)
lineas.Append(x.ToString());
}
lineas.Append(Environment.NewLine);
newline = true;
}
File.WriteAllText(pathFichero, lineas.ToString());
}
Использование serГ - в просто:
ACsv(@"c:\temp\archivo.csv");
Это могло бы превращаться в один mГ©todo extensiГіn характерно, таким образом что было бы возможно использовать для любого класса.
Ты можешь делать один StringBuilder
и помещать там ее informaciГіn отделенная запятыми, despuГ©s, сохранять это как файл:
var csv = new StringBuilder();
//loop
var newLine = string.Format("{0},{1},.....", tipoIdUsuario, numIdUsuario,.... );
csv.AppendLine(newLine);
//fin loop
File.WriteAllText(filePath, csv.ToString());