- 締切済み
【C#】 csvファイルをバイナリ化する手順
お世話になります。 csvファイルをバイナリ化する手順について教えてください。 ※バイナリファイルからの取り出し時において、csv一行あたりの バイト列長が均一になるようにしたいです。 csvの中身 日付、小数、小数、小数、小数、小数 以上、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.4
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.3
- sayaama
- ベストアンサー率44% (8/18)
回答No.2
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.1
補足
お世話になります。 おかげさまをもちまして、csvファイルから、 バイト列としてファイルに変換する(何故かテキストで読める)ことができました。 > _data = BitConverter.GetBytes(Double.Parse(sb.ToString())); おっしゃるとおり、マヌケな実装をしてしまいました。すみません。 書き込みの問題はとりあえずクローズさせていただくとして、 読み込み(復元)の段階でうまく行っていないので、 引き続き質問させてください。 下記、CSVDecoder.load でそのファイルからデータを復元しようと思うのですが、 各要素(小数)が思うように取れませんでした。 当方の実装の誤りを指摘していただければ非常にありがたいです。 お忙しいところ恐縮ですが、よろしくお願いいたします。 ---------------------------------- Source Code using System; using System.Collections.Generic; using System.Text; using System.IO; namespace CSVDataConverter { // CSV(binary) -> csv(text) class CSVDecoder { public void load(String _from, String _to) { const int RECORD_LENGTH = 128; const int ELEMENT_LENGTH = 16; FileStream f_in = null; byte[] _data = null; //ディレクトリにあるファイルを取得する String[] fs = System.IO.Directory.GetFiles(_from, "*", System.IO.SearchOption.AllDirectories); foreach (String file in fs) { f_in = new FileStream(file, FileMode.Open, FileAccess.Read); _data = new byte[f_in.Length]; f_in.Read(_data, 0, _data.Length); unsafe { double p09 = 0; double p10 = 0; double p11 = 0; double p12 = 0; double p13 = 0; double p14 = 0; double p15 = 0; double p18 = 0; fixed (byte* p = &_data[0]) { for (int offset = 0; offset < _data.Length; offset += RECORD_LENGTH) { p09 = *(double*)(p + offset); p10 = *(double*)(p + ELEMENT_LENGTH + offset); p11 = *(double*)(p + 2 * ELEMENT_LENGTH + offset); p12 = *(double*)(p + 3 * ELEMENT_LENGTH + offset); p13 = *(double*)(p + 4 * ELEMENT_LENGTH + offset); p14 = *(double*)(p + 5 * ELEMENT_LENGTH + offset); p15 = *(double*)(p + 6 * ELEMENT_LENGTH + offset); p18 = *(double*)(p + 7 * ELEMENT_LENGTH + offset); Console.WriteLine(p09 + ", " + p10 + ", " + p11 + ", " + p12 + ", " + p13 + ", " + p14 + ", " + p15 + ", " + p18); } } Console.WriteLine("----------"); } } return; } } class Program { static void Main(string[] args) { if (args.Length != 3) { Console.WriteLine("[Error:1] SYNOPSIS : CSVDataConverter <src_dir> <dst_dir> <-encode|-decode>"); } else if(args[2].Equals("-encode")) { (new CSVEncoder()).load((String)args[0], (String)args[1]); } else if (args[2].Equals("-decode")) { (new CSVDecoder()).load((String)args[0], (String)args[1]); } else { Console.WriteLine("[Error:2] SYNOPSIS : CSVDataConverter <src_dir> <dst_dir> <-encode|decode>"); } } } }