मेरे पास एक सी प्रोग्राम द्वारा उत्पन्न एक फ्लैट फ़ाइल है। फ़ाइल में प्रत्येक रिकॉर्ड में डेटा के बाद एक निश्चित लंबाई शीर्षलेख होता है। शीर्षलेख में निम्न डेटा के आकार को इंगित करने वाला फ़ील्ड होता है। मेरा अंतिम लक्ष्य इस फ्लैट फ़ाइल को क्वेरी करने के लिए सी #/.NET प्रोग्राम लिखना है, इसलिए मैं सी # का उपयोग कर फ़ाइल को पढ़ने का सबसे प्रभावी तरीका ढूंढ रहा हूं।एक कस्टम बाइनरी फ्लैट फ़ाइल का विश्लेषण करने के लिए पसंदीदा तरीका?
मुझे निम्नलिखित कोड में लाइन 7 के .NET समकक्ष को खोजने में समस्या हो रही है। जहां तक मैं कह सकता हूं, मुझे कई पढ़ना जारी रखना है (हेड के प्रत्येक फ़ील्ड के लिए बाइनरी रीडर का उपयोग करके) और उसके बाद हेडर के बाद डेटा प्राप्त करने के लिए एक को पढ़ना जारी रखें। मैं दो पढ़ने के संचालन में एक रिकॉर्ड को पार्स करने का एक तरीका सीखने की कोशिश कर रहा हूं (एक निश्चित लंबाई हेडर प्राप्त करने के लिए पढ़ा जाता है और दूसरा डेटा प्राप्त करने के लिए दूसरा पढ़ा जाता है)। ।
इस सी कोड मैं का उपयोग कर सी #/नकल करने की कोशिश कर रहा हूँ नेट है:
struct header
{
char id[2];
char toname[12];
char fromname[12];
char routeto[6];
char routefrom[6];
char flag1;
char flag2;
char flag3;
char flag4;
char cycl[4];
unsigned short len;
};
मैं के साथ इस सी # आए हैं:
struct header header; /* 1-byte aligned structure (48 bytes) */
char *data;
FILE* fp = fopen("flatfile", "r");
while (!feof(fp))
{
fread(&header, 48, 1, fp);
/* Read header.length number of bytes to get the data. */
data = (char*)malloc(header.length);
fread(data, header.length, 1, fp);
/* Do stuff... */
free(data);
}
इस शीर्ष लेख की सी संरचना है सी हेडर का प्रतिनिधित्व करने के लिए ऑब्जेक्ट:
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi, Size = 48)]
class RouterHeader
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
char[] Type;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
char[] To;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
char[] From;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
char[] RouteTo;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
char[] RouteFrom;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
char[] Flags;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
char[] Cycle;
UInt16 Length;
}
आपका हेडर कैसा दिखता है? –
सी की फ्रेड फ़ाइल i/o के समतुल्य [एसी # समकक्ष के संभावित डुप्लिकेट) (http://stackoverflow.com/questions/1935851/ac-equivalent-of-cs-fread-file-io) –
मैंने पोस्ट संपादित किया है हेडर संरचना को शामिल करने के लिए। –