Matlab फ़ाइल से निर्दिष्ट तत्वों में निर्दिष्ट संख्या में पढ़ने में विफल रहा है। मेरे पास एक साधारण प्रोग्राम है जिसे दो फाइलों में पढ़ने की जरूरत है, डेटा पर एक रैखिक ऑपरेशन करें और एक संयुक्त परिणाम को तीसरी फ़ाइल में लिखें।MATLAB बाइनरी फ़ाइलों में सफलतापूर्वक पढ़ने में विफल क्यों है?
मेरे प्रश्न हैं: 1) मैटलैब निर्दिष्ट तत्वों को पढ़ने में विफल क्यों रहता है और 2) क्या इसके लिए कोई कामकाज है? आपके विचारों में से कोई भी सहायक होगा।
इनपुट फ़ाइलों पर कुछ विवरण:
- वे बड़े हैं (~ 18GB)
- वे दोनों एक ही आकार के होते हैं (वास्तव में) प्रक्रिया पर
विवरण (2-4 feof
पर दोनों फाइलों की जांच की गई है:
- पढ़ने और डब्ल्यू के लिए इनपुट और आउटपुट फ़ाइलों को खोलें riting (resp।) इनपुट में से प्रत्येक से
N
तैरता (एन * 4 बाइट्स) में - पढ़ें फ़ाइलें
- डेटा (जैसे कि 0.5 * (datin1 + datin2)) पर कार्रवाई
- के परिणाम लिखें आउटपुट फाइल।
अनुमोदित, यह सब बहुत आसान है और ज्यादातर मामलों में इसने अच्छी तरह से काम किया है। दुर्भाग्य से, चक्र में कुछ बिंदु पर, MATLAB सभी N
तैरता फ़ाइलों में से एक से नहीं मिलता है और कदम 3.
कोड कटाव पर एक मैट्रिक्स आयाम त्रुटि देता है:
N = 2048;
fidin1 = fopen('file1.dat','r','l');
fidin2 = fopen('file2.dat','r','l');
fidout = fopen('outfile.dat','w','l');
%# I could do some assertions on the file sizes,
%# but I know they are the same size (w/o question).
while(~feof(fidin1) && ~feof(fidin2))
datin1 = fread(fidin1,N,'float=>single',0,'l');
datin2 = fread(fidin2,N,'float=>single',0,'l');
%# the following line produces an error after 100
%# or more iterations in to the procedure
datout = 0.5*(datin1+datin2);
fwrite(fidout,datout,'float',0,'l');
end
UPDATE 1 मैं प्राप्त कर रहा हूँ त्रुटि संदेश है:
???Error using ==> plus
Matrix dimension must agree.
अद्यतन 2 मैं एक सुझाव एक पीछा एनडी ferror
प्रत्येक पढ़ने के बाद चेक और जादुई समस्या दूर हो गई। तो अब मेरे प्रश्नों में एक संशोधन: यहां समस्या की जड़ क्या हो सकती है? क्या यह बस एक समय मुद्दा या बग है?
यहां अपडेट किए गए कोड का एक स्निप है (कोड का केवल एक हिस्सा दिखा रहा है)। मुझे यकीन है कि ऐसा करने के बेहतर तरीके हैं। भले ही, इन चेकों के अतिरिक्त ने मैटलैब को प्रत्येक फाइल से सभी पाठों को सफलतापूर्वक पूरा करने की अनुमति दी।
[datin1 count1]= fread(fidin1,N,'float=>single',0,'l');
[msg errn1]=ferror(fidin1);
if errn1
pos1 = ftell(fidin1);
error('Error at Position %d in file. %d bytes were read.',...
pos1,count1);
end
[datin2 count2]= fread(fidin2,N,'float=>single',0,'l');
[msg errn2]=ferror(fidin2);
if errn2
pos2 = ftell(fidin2);
error('Error at Position %d in file. %d bytes were read.',...
pos2,count2);
end
%# the following line produces an error after 100
%# or more iterations in to the procedure
datout = 0.5*(datin1+datin2);
fwrite(fidout,datout,'float',0,'l');
क्या आप सही त्रुटि संदेश प्राप्त कर रहे हैं? –
दोनों आंतरिक हार्ड डिस्क पर फाइलें हैं? और आप किस ओएस पर हैं? 32 या 64 बिट matlab? –
@ एंड्रयू, '==> प्लस का उपयोग करने में त्रुटि ...मैट्रिक्स आयामों को सहमत होना चाहिए '। – ephsmith