由于这是第一个讨论主题,如果我说错了,请事先原谅我。我的问题是,我有一个CSV文件的例子,格式为'.txt',我正在使用这个文件。
- 名称名称名称
- 地址
- 方向
- 状态
- 持续时间
- 日期
我想得到这样的值。我用了CSVHelper,要么我做不到,要么我想要的格式不在那个包里。提前感谢那些帮助我的人。附件是我想解析的文件;
**Name,Address,Direction,Status,Duration,Date**
Berat Bey Dörtsan,"05315554622",Outgoing,Unanswered,00:00,00:00,8/4/2022 (9:25:48 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,00:47,00:47,8/4/2022 (9:27:55 AM)
Berat Bey Dörtsan,"05315554622",Incoming,Answered,00:54,00:54,8/4/2022 (9:35:02 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,00:19,00:19,8/4/2022 (2:58:43 PM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,00:49,00:49,8/5/2022 (9:21:52 AM)
Berat Bey Dörtsan,"05315554622",Incoming,Answered,01:56,01:56,8/16/2022 (10:17:55 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,00:47,00:47,9/7/2022 (11:02:33 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,01:19,01:19,9/7/2022 (11:04:35 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,01:57,01:57,9/7/2022 (11:07:20 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,04:59,04:59,9/7/2022 (11:12:54 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,01:50,01:50,9/7/2022 (11:18:36 AM)
Berat Bey Dörtsan,"05315554622",Incoming,Answered,00:37,00:37,9/7/2022 (11:36:36 AM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,00:59,00:59,9/7/2022 (11:55:19 AM)
Berat Bey Dörtsan,"05315554622",Incoming,Missed,00:00,00:00,9/7/2022 (12:15:26 PM)
Berat Bey Dörtsan,"05315554622",Outgoing,Unanswered,00:00,00:00,9/7/2022 (12:21:12 PM)
Berat Bey Dörtsan,"05315554622",Outgoing,Unanswered,00:00,00:00,9/7/2022 (12:21:24 PM)
Berat Bey Dörtsan,"05315554622",Outgoing,Answered,00:18,00:18,9/7/2022 (12:36:08 PM)
我试着这样做,
- 姓名=贝拉特Bey Dörtsan
- 地址= 05315554466
- 方向=传出
- 状态=未答复
- 持续时间= 00:54 - 01:56
- 日期= 2022年8月4日(上午9:25:48)
我用的是这些代码
using CsvHelper;
using CsvHelper.Configuration.Attributes;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TextVeriCekme
{
public partial class Form1 : Form
{
String csvPath = "";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog
{
Title = "CSV Dosyası Aç",
Filter = "csv files (*.csv)|*.csv",
CheckFileExists = true,
CheckPathExists = true
};
if (ofd.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(ofd.FileName);
csvPath = ofd.FileName;
}
}
public class Foo
{
public string Name { get; set; }
public string Address { get; set; }
public string Direction { get; set; }
public string Status { get; set; }
public string Duration { get; set; }
[Name("Date")]
[Format("dd-MM-yyyy")]
public DateTime Date { get; set; }
}
int sayac = 0;
private void button2_Click(object sender, EventArgs e)
{
IEnumerable<Foo> records = null;
List<Foo> list = null;
using (var reader = new StreamReader(csvPath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
records = csv.GetRecords<Foo>();
list = records.ToList();
MessageBox.Show("Toplam Kayıt : " + records.Count().ToString());
foreach (Foo record in list)
{
if (sayac == 1)
{
MessageBox.Show(record.Name);
MessageBox.Show(record.Address);
MessageBox.Show(record.Direction);
MessageBox.Show(record.Status);
MessageBox.Show(record.Duration);
MessageBox.Show(record.Date.ToString());
}
sayac++;
}
}
}
}
}
这样我就不能得到'日期'变量。我想做的一般是一个窗口形式来保持这些通话记录(日期和时间)。
2条答案
按热度按时间ne5o7dgx1#
Foo
类型中日期的格式修饰错误。日期值如下所示:因此需要相应地修饰类型:
如果您无法更改该属性,则需要提供ClassMap配置,如下所示:
https://stackoverflow.com/a/62536666/3043
xwbd5t1u2#
问题的一部分是
Duration
是数据中的两列,因为它没有用双引号括起来。00:47,00:47
而不是"00:47,00:47"
。因此,您不能通过头名称,而是需要使用
ClassMap
来通过Index
Map属性。