PDA

View Full Version : سیو کردن اطلاعات لیست در فایل



hamird
شنبه 06 تیر 1388, 18:57 عصر
سلام.

من یک برنامه ساده دارم می نویسم که رشته کاراکتر داخل یه edit control رو توی یه list box وارد کنه و در نهایت با دکمه سیو اون رو توی فایل بنویسه..

من این دستور رو به کار بردم:


UpdateData();
CFile f;
f.Open(_T("file.txt"), CFile::modeCreate | CFile::modeWrite);
CArchive ar(&f, CArchive::store);
ar << ؟؟؟;
ar.Close();
f.Close();
UpdateData(false);

حالا الان نمی دونم جای اون علامت سوال چی بذارم که لیست رو سیو کنه..
راه حلی برای این مشکل هست؟

با تشکر.

پ.ن. توی محیط MFC دارم می نویسم این رو..

hamird
دوشنبه 08 تیر 1388, 18:26 عصر
البته هنوز کسی بهم جواب نداده راجع به این سوال، ولی یه سوال دیگه دارم.. من هنوز نتونستم بفهمم که چطوری باید اطلاعات این لیست رو سیو کنم. ولی یکی بهم گفته که با فایل باینری هم میشه اینکار رو کرد..
کسی می تونه من رو راجع به این موضوعات راهنمایی کنه؟

MMMYousefMMM
دوشنبه 08 تیر 1388, 19:33 عصر
البته بنظر من سوال مبهم است و یا شاید علم من آنرا درک نمیکند. ولی اگر به این روش میخواهید اطلاعات لیست رو در یک فایل مثلا متنی سیو کنید بهتره با حلقه تمام اطلاعات ایندکس های لیست رو بدست بیاری بعد میتونی تو فایل رایت کنی مثلا شبه کد زیر:

string s="";
for(i=first;i<last;i++){
s+=list.Items[i].Tostring();
s+="/";
}
arr<<s;

که در اینجا از کاراکتر / بعنوان جداکننده استفاده کردم. البته این روش عاری از اشکال نیست، و راههای خوب زیادی وجود دارد.

hamird
دوشنبه 08 تیر 1388, 20:16 عصر
البته بنظر من سوال مبهم است و یا شاید علم من آنرا درک نمیکند. ولی اگر به این روش میخواهید اطلاعات لیست رو در یک فایل مثلا متنی سیو کنید بهتره با حلقه تمام اطلاعات ایندکس های لیست رو بدست بیاری بعد میتونی تو فایل رایت کنی مثلا شبه کد زیر:

string s="";
for(i=first;i<last;i++){
s+=list.Items[i].Tostring();
s+="/";
}
arr<<s;

که در اینجا از کاراکتر / بعنوان جداکننده استفاده کردم. البته این روش عاری از اشکال نیست، و راههای خوب زیادی وجود دارد.

من برای وارد کردن اسم از edit controlبه list box از این روش استفاده کردم:


CString indexname;
indexname = name;
((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(0,indexname);
name.Empty();


name متغیر edit control هست..

البته نمی دونم که ایا اینکاری که من کردم درست هست یا نه.. :متفکر:
در کل من تازه شروع کردم به نوشتن برنامه با MFC زیاد وارد نیستم.. برای دانشگاه ما فقط c++ کار کردیم، MFC رو خودم دارم میخونم.

Nima_NF
سه شنبه 09 تیر 1388, 01:02 صبح
من چندان متوجه مشکل شما نشدم، خوب فقط شما که رشته مورد نظر را دارید کافیست رشته را به خروچی بفرستید، یا این طوری بنویسید:



CFile f;
CString str1 = "your string"
f.Open(_T("file.txt"), CFile::modeCreate | CFile::modeWrite);

CArchive ar(&f, CArchive::store);
ar.WriteString( str1 );

یا بدون CArchive :



CFile f;
CString str1 = "your string"
f.Open(_T("file.txt"), CFile::modeCreate | CFile::modeWrite);

f.Write(str1.GetBuffer(100) , 100);
str1.ReleaseBuffer( );

اگر اسکی نیست، تعدا کارکترها در Write مثلا از 100 باید بشود 200 تا.

hamird
سه شنبه 09 تیر 1388, 01:18 صبح
ببخشید اقا نیما، مثل اینکه خیلی واضح نگفتم..

این شکل ظاهری دیالوگ من هست:

http://img38.picoodle.com/img/img38/2/6/29/hamird/f_upimgm_d60b95d.jpg

برای edit control یه متغییر به اسم name از نوع Cstring از دسته value ایجاد کردم.. و دکمه پریوو رو همونطور که توی پست دومم گفتم درست کردم که ورودی رو می فرسته به لیست..
حالا دکمه سیو من باید اطلاعاتی که توی لیست هستند رو سیو کنه. من اینجای کار مشکل دارم..
مثلا وقتی که من بجای اون علامت سوال های پست اولم name رو می زنم، فقط اخرین اسم وارد شده رو سیو می کنه.. من می خوام تمام اسامی داخل لیست توی فایلم ایجاد بشه..

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

Nima_NF
سه شنبه 09 تیر 1388, 12:12 عصر
خوب پس سوال شما نحوه خواندن اطلاعات از listbox هست، نه خروجی آنها.

با دادن ایندکس هر رشته می توانید توسط آن را رشته را دریافت کنید و در فایل ذخیره کنید:



CString str1;
int num;

for (int i=0;i < mListBox.GetCount(); i++)
{
mListBox.GetText( i, str1 );

ar << str1;
}

توجه کنید که شما باید از طریق variable wizard یا همان Add variable یک متغیر از نوع CListBox تعریف کنید (همانطوری که به سایر کنترل ها متغیر تخصیص می دهید) تا بتوانید از متدهای این کلاس استفاده کنید و دیگر نیاز به GetDlgItem برای دستری به لیست باکس نیست. یعنی در همان کلاس چیزی به شکل زیر می شود:



CListBox mListBox;

پس اگر هم می خواهید رشته ای به لیست باکس اضافه کنید مستقیم بنویسید:



mListBox.InsertString (-1 ,indexname);

hamird
سه شنبه 09 تیر 1388, 13:11 عصر
اها، الان فهمیدم که منظورت چیه. ولی موقع اجرای برنامه وقتی دکمه سیو رو می زنم، یه خطا از دیباگ برنامه میگیره..

الان بدنه دکمه سیو من اینه: مشکلی من حس نمی کنم. مگر اینکه توی قسمت حلقه for مشکلی باشه که ندونم..


UpdateData();
CFile f;
CListBox list;
f.Open(_T("file.txt"), CFile::modeCreate | CFile::modeWrite);
CArchive ar(&f, CArchive::store);
CString str1; int i;
for (i=-1;i < list.GetCount() ; i++)
{
list.GetText(i, str1);
ar << str1;
}
ar.Close();
f.Close();
UpdateData(false);من اون قسمتی که ایراد گرفته رو دیباگ کردم، توی قسمت afxwin2 مشکل هست، ولی من متوجه خطا نشدم..

با تشکر.

Nima_NF
سه شنبه 09 تیر 1388, 16:32 عصر
به قول گفتنی مشکل تابلو هست :D
یعنی هر دو موردی که گفتم را انجام ندادید:

1- شما ایندکس (همان i را در حلقه for) از -1 شروع کردید، در حالی که در تابع GetText از 0 ایندکس ها شروع می شود. اگر در جایی -1 استفاده می کنیم، آنجا در MSDN تعریف شده است که مثلا -1 به معنی خاصی هست.

2- توضیح دادم که از طریق add variable wizard مانند سایر متغیر ها، متغیری داخل کلاس به شکل public یا private از CListBox تعریف کنید، در حالی که شما آن را محلی داخل تابع تعریف کردید.
wizard خودش کنترل شما را به ID CListBox متصل می کند و فقط تعریف شئیی از آن نیست.

hamird
سه شنبه 09 تیر 1388, 17:19 عصر
به قول گفتنی مشکل تابلو هست :D
یعنی هر دو موردی که گفتم را انجام ندادید:

1- شما ایندکس (همان i را در حلقه for) از -1 شروع کردید، در حالی که در تابع GetText از 0 ایندکس ها شروع می شود. اگر در جایی -1 استفاده می کنیم، آنجا در MSDN تعریف شده است که مثلا -1 به معنی خاصی هست.

2- توضیح دادم که از طریق add variable wizard مانند سایر متغیر ها، متغیری داخل کلاس به شکل public یا private از CListBox تعریف کنید، در حالی که شما آن را محلی داخل تابع تعریف کردید.
wizard خودش کنترل شما را به ID CListBox متصل می کند و فقط تعریف شئیی از آن نیست.

بله.. اشتباه من این بود که موقع تعریف کردن متغییر برای لیست باکسم، متغییر رو value گذاشته بودم نه control برای همین مشکل بوجود امده بود..
الان داخل فایل من با وارد کردن سه اسم همچنین چیزی هست.. hamirdӿhamidrezaϿhamid

اگر بخوام دقیقا این کار رو برعکس انجام بدم باید از چه دستوری استفاده کنم؟
یعنی یه دکمه به اسم preview داشته باشم که وقتی اون رو بزنم متحویات فایل رو داخل یه لیست دیگه نمایش بده.
من الان یه cstring به نام c تعریف کردم، و محتویات فایل رو داخل اون میریزم.. بعد اون رو به ادرس لیست دوم منتقل میکنه..

باز هم ممنون از راهنمایی هاتون..

ویرایش:
من الان این کاری که گفتم رو اجرا کردم.. ولی فقط اخرین اسم ذخیره شده توی فایل رو بر می گردونه..

Nima_NF
سه شنبه 09 تیر 1388, 19:59 عصر
همانطوری که در فایل ریختید (یا کلا به شکل حلقه for):



ar >> str1;
ar >> str2;
ar >> str3;

hamird
سه شنبه 09 تیر 1388, 20:47 عصر
همانطوری که در فایل ریختید (یا کلا به شکل حلقه for):



ar >> str1;
ar >> str2;
ar >> str3;



درسته. فقط تنها موردی که هست، قسمت دوم حلقه for هست.. مشکل من در پست قبل این بود که حلقه نداشت برنامه، بنابراین فقط اخرین اسم وارد شده رو به لیست منتقل می کرد. الان داخل حلقه کاری که میخوام انجام میشه، ولی مثلا اگه بزنم i < 100 و 4 اسم وارد کنم قبل از نشون دادن اسامی یه پیغام خطا میده. توی قسمت دوم بدنه for چه چیزی باید قرار بدم که به اندازه که داخل فایل اسم هست فایل تکرار بشه..؟


for (i=0; i< ؟؟؟; i++)
{
ar >> str;
nlist.InsertString(0, str);
}
اگر عددی بذاریم بجای علامت سوال، قبل از لود کردن اسامی از فایل این پیام رو میده:
attempted to access an unnamed file pass it's end

Nima_NF
سه شنبه 09 تیر 1388, 22:53 عصر
این طور اطلاعات را باید خودتان در فایل قرار دهید تا راحت و بدون دردسر بتوانید رشته ها را بخوانید. مثلا برای مورد شما اولین چیز که در فایل می ریزید همان تعداد رشته ها باید باشد:



int maxNum = 3;

ar << maxNum ;

بعد از همین مورد برای حلقه استفاده کنید. (هر چند که راه های دیگری هم هست، اما بهترین راه و ساده ترین همین روش هست که تقریبا در اکثر فایل ها چنین قالب هایی برای نحوه خواندن تعریف می شود.)

hamird
چهارشنبه 10 تیر 1388, 01:41 صبح
ببخشید اقای نیما متوجه نشدم.. چطوری این متغییر رو وارد لیست کنم که بعدا بتونم لود کنم..

من الان یه متغییر جهانی به اسم num ایجاد کردم، و در حلقه دکمه سیو به این صورت قرار دادم:


for (i=0; i < mlist.GetCount(); i++)
{
mlist.GetText(i, str);
ar << str;
num++;
}و بعد در حلقه دکمه لود استفاده کردم:


for (i=0; i < num; i++)این کار به نظر درست امد.. وقتی برنامه رو ران کردم، اول چند اسم وارد لیست کردم، سیو کردم و لود کردم اسامی رو توی لیست جدید.. یعنی کاملا درست کار کرد.

ولی وقتی برنامه بار دیگه اجرا میشه، وقتی لود رو میزنم اطلاعات ظاهر نمیشه.. یعنی عملا دکمه لود ناکارامد شده، و با بسته شدن برنامه دیگه قادر نیست اطلاعات رو لود کنه..

Nima_NF
چهارشنبه 10 تیر 1388, 18:53 عصر
شما نیاز نیست عدد را در لیست وارد کنید فقط آن را رد فایل می ریزید و می خوانید تا تعداد رشته های موجود در فایل را راحت به شما بدهد.

برای مشکل شما با دیباگر متغیر ها را چک کنید که با باز کردن مجدد برنامه آن ها پر می شوند، مخصوصا خود همین عدد num شما.

hamird
پنج شنبه 11 تیر 1388, 00:43 صبح
شما نیاز نیست عدد را در لیست وارد کنید فقط آن را رد فایل می ریزید و می خوانید تا تعداد رشته های موجود در فایل را راحت به شما بدهد.

برای مشکل شما با دیباگر متغیر ها را چک کنید که با باز کردن مجدد برنامه آن ها پر می شوند، مخصوصا خود همین عدد num شما.

بله مشکلم این هست که این عدد num که استفاده میشه، با بستن برنامه دوباره به حالت اول بر میگرده.. باید به طریقی این عدد رو ذخیره کنم که برای خوندن مجدد اون مشکلی نداشته باشم ولی نمی دونم چطوری اینکار رو کنم؟

راستش این روشی که می گید رو کامل نفهمیدم. البته اینکاری که توی پست قبلم گفتم کاملا درست انجام میشه، ولی وقتی برنامه بسته میشه عدد num هم از بین میره و حلقه برنامه کلید load کردن من اجرا نمیشه.. مشکل من از بین رفتن اون عدد هست..

hamird
پنج شنبه 11 تیر 1388, 19:11 عصر
اقای نیما من متاسفانه هنوز پیدا نکردم راه حل این رو، میتونی من رو راهنمایی کنی؟... +یه سوال دیگه هم دارم.. ایا من میتونم همین محتویات کلید load رو در DoDataExchange کپی کنم که با باز شدن یه دیالوگ باکس جدید بصورت خودکار ظاهر بشوند؟

Nima_NF
پنج شنبه 11 تیر 1388, 21:07 عصر
در مورد سوال اول که خیر، بیشتر از این کاری از دستم بر نمی آید. عدد را درفایل ذخیره می کنید و سپس آن را می خوانید؛ همین.

در مور سوال دوم، تابعی این کار OnInitDialog (برای دیالوگ ها) و OnCreate (برای پنجره ها) هست، در آن باید این کارها را انجام دهید. این تابع است که قبل از باز شدن دیالوگ محتویاتش اجرا می شود.

hamird
پنج شنبه 11 تیر 1388, 22:42 عصر
در مور سوال دوم، تابعی این کار OnInitDialog (برای دیالوگ ها) و OnCreate (برای پنجره ها) هست، در آن باید این کارها را انجام دهید. این تابع است که قبل از باز شدن دیالوگ محتویاتش اجرا می شود.


پس من باید با oninitdialog کار کنم. راجع به این تابع و ایجاد ان توضیحی می دهید یا لینکی موجود هست؟ که اون رو کجا و چگونه می توان اجرا کرد؟

Nima_NF
جمعه 12 تیر 1388, 12:45 عصر
در دیالوگ ها این تابع حتما ساخته می شود، اگر نشد خودتان به شکل زیر اضافه کنید چون این توابع معمولا در کلاس های والد به صورت virtual تعریف شده اند:
این توابع همان پیام های ویندوز هستند، که خودکار اجرا می شوند و فقط شما باید آن را تعریف کنید و موارد مورد نیاز را داخل آن بنویسید.

تعریف پیام ها یا Override کردن توابع را که بلد هستید ؟
اگر خیر، به این شکل:
class view را باز کنید، کلاس دیالوگ یا پنجره را انتخاب کنید، در پنجره properties دو آیکن بالای لیست ها وجود دارد.
یکی با نام messages و یکی با نام overrides.

- برای OnInitDialog در دریالوگ ها، overrides را انتخاب کنید و سپس آن را از لیست پیدا کنید و در فیلد جلوی آن Add را انتخاب کنید تا این تابع اضافه شود.

- برای OnCreate در پنجره ها، messages را انتخاب کنید و سپس WM_CREATE را از لیست پیدا کنید و در فیلد جلوی آن Add را انتخاب کنید تا این تابع اضافه شود.

hamird
جمعه 12 تیر 1388, 18:57 عصر
متشکرم اقای نیما.. کاری که گفتی رو انجام دادم و درست هم کار کرد..
فقط یه مساله ای راجع به سیو کردن اطلاعات باقی مونده.. من وقتی که برنامه رو می بندم و دوباره باز می کنم، و دوباره می خوام اطلاعات رو وارد لیست و فایل کنم، اطلاعات روی اطلاعات قبلی ذخیره میشه.. ولی من میخوام که اضافه بشه به انتهای داده های قبلی.. برای اینکار باید چیکار کنم؟

Nima_NF
شنبه 13 تیر 1388, 00:28 صبح
در هنگام باز کردن فایل، modeNoTruncate را نیز به عنوان فلگ در تابع open قرار دهید تا فایل را خالی نکند. سپس با تابع SeekToEnd نشانه گر مکان کنونی نوشتن در فایل را به انتهای آن ببرید. این وظیفه شما هست که به نحوی کد بنویسید تا همواره بدانید چقدر اطلاعات در فایل نوشته اید و با استفاده از تابع Seek در دفعات بعدی به مکان مورد نظر بروید:



CFile cfile;
ULONGLONG fileLength = cfile.SeekToEnd();

hamird
شنبه 13 تیر 1388, 01:20 صبح
متشکرم. فقط اخرین موضوعی که مشکل دارم که توی سایت های مرجع نتونستم چیزی پیدا کنم که مشکلم حل بشه این هست که ایا میشه در clistbox کالم بندی داشت؟ یعنی ردیف بندی کنیم یه لیست رو؟ اگر میشه من رو راهنمایی کنید..

و اینم یه سوال اف تاپیک.. من مثلا اگر بخوام برنامه رو برای شما که visual studio دارید بذارم فقط همون فایل exe رو بذارم کافیه؟

Nima_NF
شنبه 13 تیر 1388, 03:06 صبح
سوال اولتان را متوجه نشدم. فکر می کنم آن چیزی که منظور شماست همان list-view در حالت report با header هست. کلاس CListView یا همان CListCtrl که دارای column هست.

پاسخ سوال دوم، سوال شماره 4 در این لینک (http://barnamenevis.org/forum/showthread.php?t=166590)، باید dll ها را نیز نصب کنید (حدود 2MB)
برای افرادی که visual studio دارند، در حالت release کامپایل کنید کافی هست، چون dll های مورد نیاز در ویندوز نصب شده است.

hamird
شنبه 13 تیر 1388, 05:54 صبح
من می خوام که بجای یک لیست با یک ورودی از ادیت کنترل، برای مثال 3 ادیت کنترل داشته باشم که با زدن کلید نمایش به صورت یک جدول مثل نام نام خانوادگی شغل و هر کدام از این سه ورودی با فاصله معین قرار بگیرند.. البته من هنوز نمی دونم که لیست باکس این قابلیت رو داره یا نه؟ من راجع به لیست ویوو نمی دونم که ایا قابلیت کار با فایل را داره یا نه؟
با تشکر.

hamird
شنبه 13 تیر 1388, 12:44 عصر
من توی اینترنت رو گشتم.. تا جایی که فهمیدم استفاده از چند ستون در لیست باکس مرسوم نیست، ولی با استفاده از این میشه به صورتی که من گفتم جدول بندی کرد:

CString s1 = "Hello";
CString s2 = "World";
CString sResult = s1 + CString('\t') + s2;

Nima_NF
شنبه 13 تیر 1388, 13:56 عصر
عکس داخل این لینک را ببینید (http://barnamenevis.org/forum/showpost.php?p=603253&postcount=5)، موارد در لیست چندین ستون دارند.

همانطور که گفتم چیزی که شما می خواهید list-view در حالت report هست. هر کنترل برای خودش کاربردی دارد، listbox تنها لیستی ساده هست.

hamird
دوشنبه 15 تیر 1388, 10:47 صبح
سلام. دوتا سوال دیگه هم پیش اومده برام.

1. چطوری میشه فایل رو خالی کرد؟ یعنی با چه دستوری میشه تمام محتویات فایل رو از بین برد؟
2. لیست رو هم می خوام خالی کنم. اون رو هم نمی دونم چطوری انجام بدم..؟

باتشکر.

Nima_NF
دوشنبه 15 تیر 1388, 12:30 عصر
1- فایل را ببندید (close) و سپس مجددا با Open و فلگ modeCreate آن را باز کنید تا فایل به صفر truncate شود.

2- نگاه کنید هر کلاسی دارای متدهایی/تابع هایی هست. پس آن را در MSDN وارد کنید (مثلا CListBox ) و سپس در انتهای آن بخشی با نام CListBox members وجود دارد که از طریق آن می توانید سایر متدهای کلاس را با جزییات مشاهده کنید.
پس برای خالی کردن محتویات لیست از ResetContent استفاده کنید.

hamird
دوشنبه 15 تیر 1388, 12:42 عصر
متشکرم.. هردو کار بدرستی انجام شد.
یکی از سوالاتی هنوز برام باقی مونده این هست که چطوری یه متغییر رو تعریف کنم که با باز کردن مجدد برنامه عددی که بوده مقدار ذخیره شده خود رو حفظ کنه و پاک نشه..
من توی کلیدم، یک عددی را لازم دارم که نگه دارم مقدارش رو. ولی وقتی برنامه بسته میشه مقدار این عدد دوباره به حالت اولیه برمیگرده..

hamird
دوشنبه 15 تیر 1388, 22:57 عصر
اقای نیما، من این برنامه رو با توجه به چیزایی که گفت تقریبا کامل کردم.. هرچند یه مقداری هنوز کار داره.

نظرت رو راجع بهش بگی خوشحال میشم.
http://www.mediafire.com/?mhqdz4ztxgm
این فقط فایل exe هست.. اگر چیزی دیگه لازم هست بگید تا اپلد کنم.

البته این اولین برنامه mfc من بود. پس احتمالا خیلی مبتدیانه به نظر میاد.
لود کردن این برنامه هنوز مشکل داره. ولی مشکل باعث اختلال توی کار برنامه نمیشه.. من چون بالاخره نتونستم عدد رو در فایل نگه دارم برای حلقه لود کردن i > 100 رو زدم.. بنابراین فقط زمانی اررور نمیده که دقیقا 100 اسم وارد شده باشه.. اگر کمتر باشه ایراد میگیره که فضای بیهوده داریم. اگر بیشتر باشه هم تا 100 تارو نشون میده.

یه مشکل دیگه هم که به نظر نمیاد ولی هست این هست که همه متغییر های من cstring هستند، بنابراین مثلا اگر کسی جای تاریخ حروف بزنه ایرادی دستگاه نمی گیره.. ولی من یه بار متغییر رو از نوع عددی تعریف کردم ولی موقع فرستادن به لیست ایراد میگرفت که منصرف شدم تا اینجا از اینکه متغییر های عددی رو وارد کنم.

فقط یه چیز دیگه هم هست.. اگر درباره برنامه رو ببینید، من اسم سه سایتی که قرار دادم به صورت استتیک هست. اگر بخوام اینها لینک باشن که به ادرس سایت باید چیکار کنم؟

با تشکر از راهنمایی ها.

Nima_NF
سه شنبه 16 تیر 1388, 00:48 صبح
خوب باید برنامه را طوری بنویسید که به هیچ عنوان چنین bug های امنیتی خطرناکی نداشته باشد. در کل آغاز خوبی هست، موفق باشید.


فقط یه چیز دیگه هم هست.. اگر درباره برنامه رو ببینید، من اسم سه سایتی که قرار دادم به صورت استتیک هست. اگر بخوام اینها لینک باشن که به ادرس سایت باید چیکار کنم؟
آموزش این کار در این لینک (باید اطز طریق کدنویسی این کار را انجام دهید):
http://www.codeguru.com/Cpp/controls/controls/hyperlinkcontrols/article.php/c2133

البته در MFC کلاس CLinkCtrl نیز برای این کار وجود دارد، اما فقط برای ویندوز XP به بعد قابل استفاده است.

hamird
چهارشنبه 17 تیر 1388, 11:54 صبح
بله می دونم این باگ ها خطرناک هستند.. ولی خب بلد نیستم هنوز این مشکلات رو چطوری برطرف کنم. دارم فعلا روش کار می کنم.
برای مشکل تبدیل عدد به استرینگ راهی هست که بشه انجام داد؟ که متغیر edit control رو مثلا long int تعریف کنیم ولی از طریق insertstring اون رو وارد لیست کنیم..؟

Nima_NF
چهارشنبه 17 تیر 1388, 23:59 عصر
برای مشکل تبدیل عدد به استرینگ راهی هست که بشه انجام داد؟ که متغیر edit control رو مثلا long int تعریف کنیم ولی از طریق insertstring اون رو وارد لیست کنیم..؟
توابع itoa ، ecvt و امثال آن را در فروم جستجو کنید بارها مثال زده شده است.
ضمنا در همین بخش MFC راه های دیگری هم مطرح شده است، مانند تابع Format از کلاس CString.



CString str;
str.Format(_T("%f\n"), 6667.5567);

int num = 4543545;
char buffer[65];
_itoa( num , buffer, 10 );


لینک بعضی از مثال ها:
http://barnamenevis.org/forum/showthread.php?t=99476
http://barnamenevis.org/forum/showthread.php?t=105390