具有固定宽度的文本文件

时间:2016-03-29 11:36:01

标签: c# filehelpers

我试图用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而不是当前类型。

3 个答案:

答案 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;之后开始。基本上你应该照顾你的空间。