PDA

View Full Version : سوال: استخراج فایل متنی



farbehar1
سه شنبه 02 تیر 1394, 12:22 عصر
با سلام خدمت اساتید گرامی
میشه منو در مورد این سوال راهنمایی بفرمایید؟
از یک فایل متنی باید مختصات چند نقطه در فضای دو بعدی ، به داخل آرایه انتقال دهم ، چطور این کار را انجام دهم ؟
تصویر ضمیمه توضیح کامل تری داره.
تشکر پیشاپیش

ehsan_faal
سه شنبه 02 تیر 1394, 14:34 عصر
سلام.
این یک مثال ساده از استفاده از iterator ها برای خوندن از فایله.
میتونه بهتون ایده بده و کارتون رو راه بندازه:

#include <iostream>
#include <fstream>
#include <numeric> // for accumulate()
#include <iterator>

using namespace std;

int main()
{
ifstream myInt("data");
istream_iterator<int> iter(myInt);
istream_iterator<int> eos; // end of stream iterator

cout << "Sum of the data is "
<< accumulate(iter, eos, 0)
<< endl;
return 0;
}


خروجی:

Sum of the data is 55

محتویات فایل data :

1 2 3 4 5 6 7 8 9 10

منبع (http://www.bogotobogo.com/cplusplus/stl3_iterators.php)

amirtork
چهارشنبه 03 تیر 1394, 01:14 صبح
سلام*
با تشکر از جناب آقای @Ehsan_faal، روش دیگه ای هم برای انجام این کار وجود داره که به وسیله ی آرایه ی دوبعدی (به طول n و عرض 2)‌ و بدون استفاده از iterator ها انجام میشه.
برای انجام این کار شما لازم دارید یک آٰرایه دو بعدی با استفاده از دستور new بسازید به طول n ( که n همان عدد موجود در سطر اول است) و عرض 2 ( برای x و y).
سپس با استفاده از عملگر >> (http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/) برای شی ifstream (http://www.cplusplus.com/reference/fstream/ifstream/ifstream/) ساخته شده( منظور همان شی است که در کد جناب آقای @Ehsan_fa در سطر ۱۰ ساخته شده است) یا getline (http://www.cplusplus.com/reference/istream/istream/getline/) ورودی ها رو بخونید از فایل و در آرایه ذخیره کنید.(برای دیدن مثال های ورودی و خروجی فایل به این لینک (http://www.cplusplus.com/doc/tutorial/files/) مراجعه کنید.)
و در مرحله ی آخر آرایه دوبعدی ساخته شده رو delete کنید.








* اگر در نوشتن هرکدوم از مراحل بالا به مشکل برخوردید اعلام کنید :-) و به خاطر نگارش بد توضیحات هم پیشاپیش عذر میخوام.

farbehar1
پنج شنبه 04 تیر 1394, 17:59 عصر
سلام*
با تشکر از جناب آقای @Ehsan_faal، روش دیگه ای هم برای انجام این کار وجود داره که به وسیله ی آرایه ی دوبعدی (به طول n و عرض 2)‌ و بدون استفاده از iterator ها انجام میشه.
برای انجام این کار شما لازم دارید یک آٰرایه دو بعدی با استفاده از دستور new بسازید به طول n ( که n همان عدد موجود در سطر اول است) و عرض 2 ( برای x و y).
سپس با استفاده از عملگر >> (http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/) برای شی ifstream (http://www.cplusplus.com/reference/fstream/ifstream/ifstream/) ساخته شده( منظور همان شی است که در کد جناب آقای @Ehsan_fa در سطر ۱۰ ساخته شده است) یا getline (http://www.cplusplus.com/reference/istream/istream/getline/) ورودی ها رو بخونید از فایل و در آرایه ذخیره کنید.(برای دیدن مثال های ورودی و خروجی فایل به این لینک (http://www.cplusplus.com/doc/tutorial/files/) مراجعه کنید.)
و در مرحله ی آخر آرایه دوبعدی ساخته شده رو delete کنید.








* اگر در نوشتن هرکدوم از مراحل بالا به مشکل برخوردید اعلام کنید :-) و به خاطر نگارش بد توضیحات هم پیشاپیش عذر میخوام.
با سلام و تشکر از هر دو عزیز
چطور به برنامه بگم که خط اول رو بریزه داخل n و به تغداد اون سطر برای آرایه دو بعدی ایجد کنه و در نهایت الباقی فایل رو - از خط دو الی n - به داخل این آرایه بریزم؟

amirtork
جمعه 05 تیر 1394, 11:31 صبح
سلام.
در هربار استفاده از عملگر << به خط بعدی منتقل میشه.
مثلا فایل test.in رو با محتویات زیر در نظر بگیرید:


Barnamenevis
.org
حالا برنامه ی زیر رو که در پوشه ی test.in هست رو در نظر بگیرید:

#include<iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ifstream in;

string str[2];
in.open("test.in");

for(int i = 0 ; i < 2 ; i ++)
in>>str[i];
for(int i = 0 ; i < 2 ; i ++)
cout<<str[i];
return 0;
}




خروجی این برنامه Barnamenevsi.org خواهد بود.

farbehar1
جمعه 05 تیر 1394, 12:03 عصر
تشکر از شما ، حالا یک سوال دیگه
اینکه الان اعداد من داخل آرایه یک بعدی اند
میخام اونهارو به آرایه ی دو بعدی
b[n][2]
انتقال بدم، اگر میشه راهنماییم کنید.

amirtork
جمعه 05 تیر 1394, 13:20 عصر
سلام.
متوجه مشکلتون نمیشم!
کجای این انتقال رو مشکل دارید؟