[英]Binary file read write
OK I have a binary file that needs to be able to read and then write to from csv data.好的,我有一个二进制文件,需要能够从 csv 数据读取然后写入。
I have about 12k records that needs to converted from csv to binary, This hard for me to wrap my head around it personally.我有大约 12k 条记录需要从 csv 转换为二进制文件,这让我个人难以理解。 Any help would be appreciated.
任何帮助,将不胜感激。 C# with visual studio is what I am using.
我正在使用带有 Visual Studio 的 C#。
This is the file that I am reading这是我正在阅读的文件
310 KEITH SFGEH6 BRENTWOOD CA 90049 å¤_ š™ÏA 310 KEITH OSAD SDNVCS BRENTWOOD CA 90049 ¤_ B 310 57I M4 8M4M8 8M BRENTWOOD CA 90049 ?¤_ 8A 310 WERTHWR SFGHERH BRENTWOOD CA 90049 À¤_ B 310 HMDFGH ADGNBSFDGNFS BRENTWOOD CA 90049 ö¤_ LB 310 GHMNDGMH SFMSFGHMNS BRENTWOOD CA 90049 ¤_ 8B 310 FGSXFDGH SDGHSDHG BRENTWOOD CA 90049 þ$¤_ ˜A 310 HTAH AFGHBADF BRENTWOOD CA 90049 &¤_ ÈA 310 ADHAD ADGH BRENTWOOD CA 90049 ©)¤_ |B 310 TYDJU DGTJ BRENTWOOD CA 90049 &*¤_ °B 310 E57IE5 ETUI BRENTWOOD CA 90049 J,¤_ ÍÌ\@ 207 TOP ME 04011
and this is the structure I am told.这就是我被告知的结构。 Each record has the following structure: #define DELIVERY_MAX_HISTORY 6
每条记录的结构如下:#define DELIVERY_MAX_HISTORY 6
#pragma pack(push,1)
typedef struct
{
char area_code[4];
char phone[8];
char name[40];
char address1[40];
char address2[40];
char city[40];
char state[3];
char zip[13];
char directions1[40];
char directions2[40];
char comment1[40];
char comment2[40];
unsigned long last_order_dates[DELIVERY_MAX_HISTORY];
float last_order_totals[DELIVERY_MAX_HISTORY];
short last_order_check_num[DELIVERY_MAX_HISTORY];
char has_bad_checks;
char ext[10]; // Currently only 4 bytes are allowed
char Zone[10]; // not unused
char extra[31];
} delivery_data_type;
#pragma pack(pop)
OK so have put this together but I have no data output to the.bin file.好的,所以把它放在一起,但我没有数据 output 到 .bin 文件。 it just sits and run and runs
它只是坐着跑着跑着
class Program
{
static void Main(string[] args)
{
using(var reader = new StreamReader(@"c:\test\custdel.csv"))
Console.WriteLine("DELIVERY Converter");
var serializer = new BinarySerializer();
using var csv = new CsvReader(Console.In, CultureInfo.InvariantCulture);
var persons = csv.GetRecords<Person>();
using var file = new FileStream("out.bin", FileMode.Create, FileAccess.Write);
foreach (var person in persons)
{
serializer.Serialize(file, person);
}
}
public class Person
{
[FieldOrder(0)] // from BinarySerialization
public string areacode { get; set; }
[FieldOrder(1)]
public string phone { get; set; }
[FieldOrder(2)]
public int name { get; set; }
[FieldOrder(3)]
public string ddress1 { get; set; }
[FieldOrder(4)]
public int address2 { get; set; }
[FieldOrder(5)]
public string city { get; set; }
[FieldOrder(6)]
public int state { get; set; }
[FieldOrder(7)]
public string zip { get; set; }
[FieldOrder(8)]
public int directions1 { get; set; }
[FieldOrder(9)]
public string directions2 { get; set; }
[FieldOrder(10)]
public int comment1 { get; set; }
[FieldOrder(11)]
public string comment2 { get; set; }
[FieldOrder(12)]
public int has_bad_checks { get; set; }
[FieldOrder(13)]
public string ext { get; set; }
[FieldOrder(14)]
public int Zone { get; set; }
[FieldOrder(15)]
public string extra { get; set; }
}
}
and this is the csv file这是 csv 文件
FieldOrder(0),FieldOrder(1),FieldOrder(2),FieldOrder(3),FieldOrder(4),FieldOrder(5),FieldOrder(6),FieldOrder(7),FieldOrder(8),FieldOrder(9),FieldOrder(10),FieldOrder(11),FieldOrder(12),FieldOrder(13),FieldOrder(14),FieldOrder(15)
207,207-210-2127,ADRIAN,160 COLUMBIA AVE,,BRUNSWICK,ME,4011,,,,,,,, 207,446-1989,ANNA,16 BRUNSWICK STATION,,BRUNSWICK,ME,,secondfloor,,,,,,, 207,207-210-2127,ADRIAN,160 COLUMBIA AVE,,BRUNSWICK,ME,4011,,,,,,,,, 207,446-1989,ANNA,16 BRUNSWICK STATION,,BRUNSWICK,ME,,二楼,,,,,,,
ok I have found that problem and resolved and on to the next one.好的,我发现了这个问题并解决了,然后继续下一个问题。 Getting an error when debugging at the "foreach (var person in person)" and this is what I am getting for the error CsvHelper.TypeConversion.TypeConverterException: 'The conversion cannot be performed.
在“foreach (var person in person)”调试时出错,这就是我得到的错误 CsvHelper.TypeConversion.TypeConverterException: '无法执行转换。 Text: 'name' MemberType: System.Int32 TypeConverter: 'CsvHelper.TypeConversion.Int32Converter' IReader state: ColumnCount: 0 CurrentIndex: 2 HeaderRecord:
文本:'name' MemberType:System.Int32 TypeConverter:'CsvHelper.TypeConversion.Int32Converter' IReader state:ColumnCount:0 CurrentIndex:2 HeaderRecord:
and my code change also and I removed the header from the csv file as I was getting another error on the headers:我的代码也发生了变化,我从 csv 文件中删除了 header,因为我在标题上遇到了另一个错误:
{
Console.WriteLine("DELIVERY Converter");
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = false,
};
using (var reader = new StreamReader(@"c:\test\custdel.csv"))
using (var csv = new CsvReader(reader, config))
{
var persons = csv.GetRecords<Person>();
var serializer = new BinarySerializer();
using var file = new FileStream("out.bin", FileMode.Create, FileAccess.Write);
foreach (var person in persons)
{
serializer.Serialize(file, person);
}
}
}
You could try something like你可以尝试类似的东西
using BinarySerialization;
using CsvHelper;
...
public class Person
{
[FieldOrder(0)] // from BinarySerialization
public string FirstName { get; set; }
[FieldOrder(1)]
public string LastName { get; set; }
[FieldOrder(2)]
public int ID { get; set; }
}
private static void Main()
{
var serializer = new BinarySerializer();
using var csv = new CsvReader(Console.In, CultureInfo.InvariantCulture);
var persons = csv.GetRecords<Person>();
using var file = new FileStream("out.bin", FileMode.Create, FileAccess.Write);
foreach (var person in persons)
{
serializer.Serialize(file, person);
}
}
It reads cvs from standard input and write binary representation to out.bin它从标准输入读取 cvs 并将二进制表示写入 out.bin
See https://github.com/jefffhaynes/BinarySerializer and https://joshclose.github.io/CsvHelper/ for details有关详细信息,请参阅https://github.com/jefffhaynes/BinarySerializer和https://joshclose.github.io/CvHelper/
Example of file that you reading looks not like csv, so maybe you should consider something like https://github.com/mikeacjones/FixedWidthFileUtils to read file您阅读的文件示例看起来不像 csv,所以也许您应该考虑使用 https://github.com/mikeacjones/FixedWidthFileUtils 之类的东西来读取文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.