我试图用C#转换CSV格式的TXT文件。我只知道C#的基础知识。我读了一下这个主题,我在Stack Overflow上找到了我可以用FileHelpers做的。
我的源txt文件采用以下格式:
14863 0001 t0001991.jpg p0001991.jpg 0007 ALFA ROMEO Sprint (1985 - 1989) Sprint V14010120309
14864 0001 t0001991.jpg p0001991.jpg 0007 ALFA ROMEO Sprint (1985 - 1989) Sprint V14010120310
14865 0001 t0001991.jpg p0001991.jpg 0007 ALFA ROMEO Sprint (1985 - 1989) Sprint V14010120305
我建了一个像这样的类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FileHelpers;
namespace ConvertTXT
{
[FixedLengthRecord()]
public class ptMedia
{
[FieldFixedLength(5)]
//[FieldTrim(TrimMode.Both)]
public int id1;
[FieldFixedLength(4)]
[FieldTrim(TrimMode.Both)]
public String id2;
[FieldFixedLength(12)]
[FieldTrim(TrimMode.Both)]
public string file1;
[FieldFixedLength(12)]
[FieldTrim(TrimMode.Both)]
public string file2;
[FieldFixedLength(4)]
[FieldTrim(TrimMode.Both)]
public int id3;
[FieldFixedLength(40)]
[FieldTrim(TrimMode.Both)]
public string brand;
[FieldFixedLength(12)]
[FieldTrim(TrimMode.Both)]
public int id4;
}
}
对于我的主要课程,我有这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FileHelpers;
namespace ConvertTXT
{
class Program
{
static void Main(string[] args)
{
var engine = new FixedFileEngine<ptMedia>();
ptMedia[] result = engine.ReadFile("h:\\PT-media.txt");
foreach (var detail in result)
Console.WriteLine("ID1: {0}, ID2: {1}, File1: {2}, File2: {3}, ID3: {4}, Veiculo: {5}, ID4: {6}",detail.id1, detail.id2, detail.file1, detail.file2, detail.id3, detail.brand, detail.id4);
Console.ReadLine();
}
}
}
但每次我尝试运行我的代码时都会收到错误:
附加信息:行:1列:37。未找到值 价值类型字段:&#39; id3&#39;上课:&#39; ptMedia&#39;。你必须使用 [FieldNullValue]属性,因为这是一个值类型,不可能 null或使用Nullable Type而不是当前类型。
答案 0 :(得分:1)
我刚刚增加了字段大小,也计算了空格,现在可以正常工作了。谢谢你们的帮助。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FileHelpers;
namespace ConvertTXT
{
[FixedLengthRecord()]
public class ptMedia
{
[FieldFixedLength(16)]
[FieldTrim(TrimMode.Right)]
public int id1;
[FieldFixedLength(5)]
[FieldTrim(TrimMode.Right)]
public String id2;
[FieldFixedLength(16)]
[FieldTrim(TrimMode.Right)]
public string file1;
[FieldFixedLength(16)]
[FieldTrim(TrimMode.Right)]
public string file2;
[FieldFixedLength(5)]
[FieldTrim(TrimMode.Right)]
public int? id3;
[FieldFixedLength(40)]
[FieldTrim(TrimMode.Right)]
public string brand;
[FieldFixedLength(13)]
[FieldTrim(TrimMode.Right)]
public string id4;
答案 1 :(得分:0)
试试public int? ID3;而不是这个公共int id3;
答案 2 :(得分:0)
当我添加类字段长度时,我得到89个字符。当我在文本文件中添加长度时,我得到109个字符。因此,根据您的文本文件,您将获得id3的空白空间。根据您的类文件,Id3在字符33处。将其翻译成您的文本文件字符33直接在&#34; t0001991.jpg&#34;之后开始。基本上你应该照顾你的空间。