[ad_1]
How can I read binary file ".DAT" to struct?
私のvbaコードでは:
構造:
Option Explicit Type Security_File StockNo As Integer StockSymbol As String * 8 StockType As String * 1 Ceiling As Long Floor As Long BigLotValue As Double SecurityName As String * 25 SectorNo As String * 1 Designated As String * 1 SUSPENSION As String * 1 Delist As String * 1 HaltResumeFlag As String * 1 SPLIT As String * 1 Benefit As String * 1 Meeting As String * 1 Notice As String * 1 ClientIDRequired As String * 1 CouponRate As Integer IssueDate As String * 6 MatureDate As String * 6 AvrPrice As Long ParValue As Integer SDCFlag As String * 1 PriorClosePrice As Long PriorCloseDate As String * 6 ProjectOpen As Long OpenPrice As Long Last As Long LastVol As Long LastVal As Double Highest As Long Lowest As Long Totalshares As Double TotalValue As Double AccumulateDeal As Integer BigDeal As Integer BigVolume As Long BigValue As Double OddDeal As Integer OddVolume As Long OddValue As Double Best1Bid As Long Best1BidVolume As Long Best2Bid As Long Best2BidVolume As Long Best3Bid As Long Best3BidVolume As Long Best1Offer As Long Best1OfferVolume As Long Best2Offer As Long Best2OfferVolume As Long Best3Offer As Long Best3OfferVolume As Long BoardLost As Integer End Type
コード読み取りファイル:
Private Sub ReadSecurity() Dim strFileName As String Dim intFileNum As Integer Dim strFileNameMar As String Dim intFileNumMar As Integer Dim record As Security_File Dim intRecordNum As Integer strFileName = "E:\Documents\MyData.DAT" intFileNum = FreeFile intRecordNum = 1 Open strFileName For Random Shared As intFileNum Len = Len(record) While Not EOF(intFileNum) Get intFileNum, intRecordNum, record With record If .StockType = "S" Or InStr(1, StrCodeStockView, Replace(Trim(.StockSymbol), "'", "")) <> 0 Then MsgBox (.StockType ) End If End With intRecordNum = intRecordNum + 1 Wend Close #intFileNum I don't know how to convert vb to c #. End Sub
私が試したこと:
試してみましたが、データが正しくありません。
私のC#コード:
using (BinaryReader b = new BinaryReader(File.OpenRead(@"E:\Documents\MyData.DAT"))) { for (int i = 0; i < b.BaseStream.Length; ++i) { try { var a1 = b.ReadString(); var t1 = b.ReadInt64(); var a2 = b.ReadSingle(); var a3 = b.ReadSingle(); var a4 = b.ReadSingle(); var a5 = b.ReadSingle(); var a6 = b.ReadSingle(); var a7 = b.ReadSingle(); var a8 = b.ReadSingle(); var a9 = b.ReadSingle(); //streamWriter.WriteLine(string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", a1, a2, a3, a4, a5, a6, a7, a8, a9, t1)); Console.WriteLine(string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", a1, a2, a3, a4, a5, a6, a7, a8, a9, t1)); Console.WriteLine("==================="); } catch { continue; } } }
解決策 1
VBA タイプの最初の要素は Integer
. C# コードで最初に読み取ろうとする要素は、 String
.
また、VBAでは、 Integer
は 16 ビット型であり、 Long
32ビットタイプです。 それらはにマッピングされます Int16
と Int32
(また short
と int
) C# で。
解決策 2
#define STEPPING_DDR DDRD #define STEPPING_PORT PORTD <pre lang="BASIC">
[ad_2]
コメント