PDA

View Full Version : سوال : ارسال مسیر فایل به عنوان پارامتر ورودی تابع



sari-1369
چهارشنبه 09 مرداد 1392, 15:54 عصر
با سلام

اساتید ؛

من یه تابعی توی متلب دارم که از اون یک dll دات نت ساختم و در حالت کلی درست کار میکنه و مشکلی نیست.
اما توی این M فایل یک جایی ، تابع XlsRead دارم برای خوندن از فایل اکسل و در حالت عادی مسیر ثابتی به عنوان ورودی اول این تابع دادم و کارشو انجام میده . اما میخوام که آدرس فایل به صورت یک پارامتر وردوی ارسال کنم به ام فایل . نمیدونم به چه صورت این کارو انجام بدم .

من به این صورت یک متغیر توی ورودی تابع تعریف کردم ، و مسیر فایل رو به اون ارسال میکنم اما با پیغام خطا مواجه میشم .


function [result]=optimFI(exNStr)

[ahmad10,leg]=xlsread(exNStr);

manij_mhm
جمعه 11 مرداد 1392, 11:26 صبح
داخل متلب مشکل دارید یا وفتی از dll استفاده می کنید؟

sari-1369
جمعه 11 مرداد 1392, 21:01 عصر
وقتی از dll استفاده میکنم مشکل دارم . البته توی متلب هم ران نکردم .
حالتی که ادرس فایل رو ثابت میزارم درست کار مینه . این کد فراخونی توی دات نت و متن خطاست :

کد :



JaYabiNative.JaYabi madule = new JaYabiNative.JaYabi();

madule.optimFIRevIV(e:\\a.xls);


متن خطا :




... MWMCR::EvaluateFunction error ...

Reference to a cleared variable exNStr.

Error in =>optimFIRevIV.m at 9.

manij_mhm
جمعه 11 مرداد 1392, 23:40 عصر
madule.optimFIRevIV(e:\\a.xls);ورودی تابع تون رو باید به صورت رشته بدید الان e:\\a.xls رشته نیست. البته برای اتصال به متلب باید از کلاس های MWArray استفاده کنید. کد زیر رو جایگذاری کنید:


madule.optimFIRevIV((MWCharArray)"e:\\a.xls");

sari-1369
شنبه 12 مرداد 1392, 00:53 صبح
ممنون از راهنماییتون :) حالت رشته ای بود ، حواسم نبود وقتی داشتم کد رو اینجا میزاشتم دبل کتیشن هارو حذف کردم . فقط اینکه MWCharArray نیم اسپیسش چیه ؟ رفرنسشو پیدا نکردم .

sari-1369
شنبه 12 مرداد 1392, 01:08 صبح
باید dll مربوطه به اسم MWArry رو اضافه میکردم . که انجام دادم. و همونطور که شما گفتین پارامتر رو ارسال کردم . اما این خطا رو داد : Input data type unsupported by MATLAB Builder NE

manij_mhm
شنبه 12 مرداد 1392, 13:26 عصر
using MathWorks.MATLAB.NET.Arrays; رو اضافه کردید؟
dll رو به چه صورت درست کردید؟ مبتنی بر .net باید باشه!

manij_mhm
شنبه 12 مرداد 1392, 13:45 عصر
این لینک (http://xinyustudio.wordpress.com/2009/07/13/using-matlab-functions-in-c/) میتونه کمکتون کنه.

sari-1369
یک شنبه 13 مرداد 1392, 02:06 صبح
dll تحت دات نته . رفرنس هارو هم اضافه کردم به پروژه . اصلا برنامه کار میکنه و خروجی رو هم دریافت میکنم . (در حالتی که ادرس فایل اکسل رو توی کد متلب به صورت ثابت تعریف میکنم) فقط در حالتی که میخوام آدرس فایل رو به صورت یک رشته توی ورودی تابع بدم دچار مشکلم :(

manij_mhm
یک شنبه 13 مرداد 1392, 09:54 صبح
شما برنامه رو اینجا بزارید چک کنم.

sari-1990
یک شنبه 13 مرداد 1392, 23:31 عصر
108521

دوست عزیز اول برای اینکه وقت میزارن تشکر میکنم و نکته ای که وجود داره برنامه اصلی رو نمیتونم بزارم روی اینترنت .

اما یک نمونه ایجاد کردم که توی این نتیجه بگیرم مشکلم حل میشه . لطفا دانلود کنید و راهنماییم کنید .

توی این برنامه یک آدرس فایل رو میفرستم و با دستور save میخوام که همون متن آدرس فایل رو توی فایل مورد نظر بنویسم . کلا مشکل من با ارسال مقادیر رشته ای به تابع هست .

manij_mhm
چهارشنبه 16 مرداد 1392, 12:07 عصر
طریقه درست کردن dll شما مشکل داره! خروجی علاوه بر dll باید شامل یه فایل با پسوند ctf هم باشه که در برنامه اونو هم اضافه کنید. کد متلبتون مشکلی نداره. من کد متلبتون رو با همون دستوری که در بالا گذاشتم بعد از تبدیل به dll اجرا گرفتم. به درستی اجرا میشه!
شما چرا 2 تا dll دارید؟!

using MathWorks.MATLAB.NET.Arrays;
using Dll; // اسم dll متلبتون
رو در هدر اضافه کنید.

Dll_m.Dll_mclass d = new Dll_mclass();

d.testproj((MWCharArray)"string");
هم برای اجرا کافیه.
ورژن 2012 باید باشه ویژوال شما. من 2010 و 2008 داشتم. این برنامه رو هم با 2008 اجرا گرفتم. ممکنه به خاطر ورژن متلب یا ویژوال شما هم باشه این تفاوت ها!

nanosi
جمعه 01 شهریور 1392, 00:18 صبح
سلام.
يك راه جالب براي تغيير آدرس و مسير در مطلب وجود داره كه فكر كنم كمكتون كنه.
البته چون شما گفتيد در m فايل هم مشكلو داريد من اينو پيشنهاد ميكنم چون بقيه تبديلات به فرمتهاي ديگه را راجبش نظر ندارم.
در اين روش هر بار آدرس جديد را با قسمتي از آدرس قديم (قسمت انتهاييش) جابجايي ميكنيم.
مثلا قراره هر بار يه فايل خونده بشه و بعد از تغييرات در آدرس جديدش ذخيره بشه و دو باره فايل بعدي را بخونيم و ذخيره كنيم. آدرس دائما براي ورودي و خروجي بايد تغيير كنه:
addr in='C:\Users\nanosi\Desktop\thesis\8\21.avi
addr out=str cat(addr in,date1(1,1:11),dir1,date1(1,12:14),dir2


در دستور بالا ذايركتوري ها مسير ساده هستند مثل متغير addr in
دستور date هم تاريخ و زمان كه برا اسم فايل خروجي معمولا بكار ميره تا فايل خروجي طبق تارخش ذخيره بشه.

دستور زير هم خيلي موقع ها واسه اينكار بكار مياد:

mkdir(dir1,date2(1,1:11)
نميدونم اين چقد بكارتون بياد اما در كل حرف از مسير و آدرس بود كه من از اين روش خوب استفاده كردم:خجالت:

she.ze
دوشنبه 11 شهریور 1392, 18:47 عصر
با سلام
موقع اجرای برنامه متلب این خطا رو نشون می ده:
(Output argument "out1" (and maybe others) not assigned during call to "C:\Program
Files\MATLAB\R2013a\toolbox\nnet\nnet\nnnetwork\ne wff.m>newff".)
بعد هم این
(Error in create_fit_net32 (line 30
;(net = newff(inputs,targets,numHiddenNeurons

ممکنه برای این باشه که بخشی از ورودی ها رشته هستند؟
ممنون میشم اگه یکی کمکم کنه
input=['C:\Users\hamid\Desktop\final-4m200.doc',1];
[for i=1:800
if i<=200
target(i)=1;

else if 200<i<401
target(i)=2;

else if 400<i<601
target(i)=3;

else
target(i)=4;
end
end
end
end
inputs = input';
targets = target';

%% Create Network
numHiddenNeurons = 300; % Adjust as desired
net = newff(inputs,targets,numHiddenNeurons);
net.divideParam.trainRatio = 70/100; % Adjust as desired
net.divideParam.valRatio = 15/100; % Adjust as desired
net.divideParam.testRatio = 15/100; % Adjust as desired

%% Train and Apply Network
[net,tr] = train(net,inputs,targets);
outputs = sim(net,inputs);

%% Plot
plotperf(tr)
plotfit(net,inputs,targets)
plotregression(targets,outputs)