PDA

View Full Version : سوال: ورودي گرفتن از فايل Excell و قراردادن خروجي در فايل Excellدوم



sweet sacrifice
چهارشنبه 24 خرداد 1391, 20:53 عصر
سلام دوستان. من 2تا فايل Excell دارم كه ميخوام تو برنامه م از يكيشون ورودي بگيرم و خروجيمو بزارم توي Excell دوميم.Excell رو تبديل به csv كردم. از كتابخونه fstream هم استفاده كردم. اما هيچكدوم از دستورام اجرا نميشه و تغييراتي كه ميخوام، تو فايلام انجام نمي شه. خواهش ميكنم بگين از چه كدي برا برنامه م استفاده كنم...:افسرده:

mehdi.mousavi
پنج شنبه 25 خرداد 1391, 17:55 عصر
سلام دوستان. من 2تا فايل Excell دارم كه ميخوام تو برنامه م از يكيشون ورودي بگيرم و خروجيمو بزارم توي Excell دوميم.Excell رو تبديل به csv كردم. از كتابخونه fstream هم استفاده كردم. اما هيچكدوم از دستورام اجرا نميشه و تغييراتي كه ميخوام، تو فايلام انجام نمي شه. خواهش ميكنم بگين از چه كدي برا برنامه م استفاده كنم...:افسرده:

سلام.
کدی که نوشته اید رو اینجا قرار بدید و بفرمایید دقیقا باهاش چه مشکلی دارید تا راهنمایی کنم.

موفق باشید.

sweet sacrifice
دوشنبه 29 خرداد 1391, 12:57 عصر
سلام دوست عزیز

#include<iostream>
#include<fstream>
#define FILE_IN "f:\book1.csv"
#define FILE_OUT "f:\book2.csv"
using namespace std;
int main()
{
char book_name[200];
char author_name[200];
int recive_date[20];
int return_date[20];
int i=0;

ifstream input(FILE_IN);
ofstream output(FILE_OUT);
input.open(FILE_IN);
output.open(FILE_OUT);
while(input>>book_name[i]>>",">>author_name[i]>>",">>recive_date[i]>>"\n"){
return_date[i]=recive_date[i]+10; output<<book_name[i]<<","<<author_name[i]<<","<<recive_date[i]<<return_date[i]<<endl;
i++;
}




مشکل اصلی من اد کردن excell تو برنامه ست. میخوام بدونم کدی که برا اد کردن excell تو برنامه نوشتم درسته یا نه. یا باید کلا از یه راه دیگه برم...آخه من برا notepad رو یه همچین کدی دیده بودم. ممنون میشم اگه کمکم کنید.

mehdi.mousavi
دوشنبه 29 خرداد 1391, 18:37 عصر
سلام.
هووممم... وقتی میگید فایل های Excel، منظور فایل های XLS یا XLSX باید باشه، نه CSV. فایل های CSV ارتباطی به Excel ندارن، بلکه فایل هایی هستند که فیلدهای موجود در اونها، توسط Comma از بکدیگر مجزا شده اند. بسیار خوب، من کد شما رو دیدم، اما متاسفانه کدتون ایرادهای زیادی داره. اولین اونها، این هستش که باید از good برای خوندن ifsream استفاده کنید و نیازی نیست فایل رو open کنید. به بیان دیگه:

ifstream input(_T("d:\\book1.csv"));
while(input.good())
{
}


اینجا فایل باز میشه و تا وقتی وضعیت stream برای خوندن مناسب باشه، شما می تونید داده ها رو از اون بخونید. ایراد دوم، نوشتن یک \ در نام فایل هستش. شما برای اینکه \ رو Escape کنید، باید یک \ دیگه پشتش بیارید (مثل کد فوق که نوشتم). ایراد سوم، نحوه خواندن اطلاعات و قرار دادن اونها در آرایه ای از Character هاست. شما یه آرایه 200 Element ای تعریف کرده اید، اما فقط عنصر i ام اون آرایه رو میخواهید با value خونده شده از فایل پر کنید (که این فرق میکنه با اینکه شما value اول رو در book_name اول بریزید). در هر حال، کد رو بدین شکل تغییر بدید:

typedef struct tagBook
{
string Name;
string Author;
string Date;
} BOOK;

TCHAR separator = ',';
string line;

ifstream input(_T("d:\\book1.csv"));
while(getline(input, line))
{
stringstream str(line);

BOOK book;
getline(str, book.Name, separator);
getline(str, book.Author, separator);
getline(str, book.Date, separator);

//Now, you got the book info...
//Do whatever you'd like to do.
}


اینجا، Structure ای تعریف کردم که اطلاعات کتاب رو در اون بشه نگهداری کرد، سپس در حلقه، بر اساس Comma ها، فایل رو خوندم و هر فیلد رو در Member مربوطه اش قرار دادم. حالا مقادیر book در هر دور از حلقه، به درستی Extract میشه و شما می تونید اونجاییکه comment نوشتم، اطلاعات رو بروش مشابه در فایل خروجی قرار بدید. (اینو برای اینکه خودتون انجام بدید، باقی گذاشتم) :)

موفق باشید.