ورود

View Full Version : سوال: نوشتن یه متن در فایل word



sourcecode
یک شنبه 04 بهمن 1394, 21:32 عصر
من میخوام یه متنی رو درون یه فایل Word بنویسم و اندازه آرایه txt من هم 10 هستش یعنی
Char txt[10] ;
من وقتی کد زیر رو اجرا میکنم و متن iloveyouiran رو وارد میکنم باید iloveyouir وارد فایل وردم بشه ولی iloveyoui نوشته میشه یعنی به جای 10 کاراکتر 9 کاراکتر وارد فایل وردم میشه و به جای کاراکتر دهم مربع قرار میده ؟ چرا ؟؟؟؟
یا مثلا اگه متن iran رو وارد کنم iran وارد فایل ورد میشه به اضافه 6 تا مربع دیگه ؟ چرا؟؟؟؟
من باید چکار بکنم که مربع هارو تو فایل word نذاره و فقط خود متن رو بنویسه 😕
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
char txt[10];
}st1;
int main()
{
fstream f1;
cin.get(st1.txt, 10);
f1.open("d:/test.doc", ios::binary | ios::out);
f1.write((char *)&st1, sizeof(student));
f1.close();
cout « endl;
system("pause");
return 0;
}



138633138634

negative60
دوشنبه 05 بهمن 1394, 09:22 صبح
از پسوند .txt استفاده کنيد,
فايل های doc فرمت خاص به خودشون رو دارند، اگر بخوايد تو اين فايلها بنويسيد يا بخونيد بايد طبق استاندارد اين فرمت عمل کنيد

sourcecode
دوشنبه 05 بهمن 1394, 11:36 صبح
فرقی نمیکنه با پسوند txt. هم مینویسم همون مشکلو داره

negative60
دوشنبه 05 بهمن 1394, 13:44 عصر
شما داری کل استراکچر به همراه فضاهاش رو ذخيره ميکنی اون مربع ها NULL هستند که تو اديتور شما به اين شکل ديده ميشن.

برای اينکه فقط متن نوشته شده ذخيره بشه بايد متغير و سايز متن رو مشخص کنيد:
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
char txt[10+1];
}st1;


int main()
{
memset(&st1, 0, sizeof(st1));
fstream f1;
cin.get(st1.txt, sizeof(st1.txt));
f1.open("d:/test.txt", ios::binary | ios::out);
//f1.write((char *)&st1, sizeof(st1));
f1.write((char *)&st1.txt, strlen(st1.txt));
f1.close();
cout << endl;
system("pause");
return 0;
}



دليل اينکه شما 10 بايت فضا اختصاص داده ايد ولی فقط 9 بايت متن در اون ذخيره ميشه به اين دليل هست که تمام فضا ها با يک بايتNULL تمام ميشوند پس هميشه زمان ساخت فضا چه استاتيک و چه دايناميک يک بايت اضافه در نظر بگيريد

pswin.pooya
سه شنبه 06 بهمن 1394, 17:02 عصر
براي كار با فايلهاي متني بهتره از QTextsream استفاده كنيد، فايلهاي متني مخصوصا فايلهايي كه كدينگي غير از كدينگ انسي دارن امكان داره چند بايت اول اونها يكسري كاراكتر باشه كه بهشون بوم گفته مي شه و اگر اونها رو درج نكنيد به احتمال زياد برنامه هاي ديگه نمي تونن محتواي اونها رو بخونن، كيوت مي تونه اين مورد رو براي شما هندل كنه پس از كلاسهاي درست و مخصوص اينكار استفاده كنيد، به شدت پيشنهاد مي كنم داكيومنت مربوطه رو مطالعه كنيد

مورد ديگه رشته ها هستن براي هندل كردن دستي اونها حتما كاراكتر /0 رو به انتهاي اونها اضافه كنيد

نكته ديگه اينه كه نوع char براي نگهداري رشته هاي انسي يا UTF8 مناسب هست براي كار با نوع داده يوني كد بهتره از نوع wchar_t استفاده كنيد همينطور باز به شدت پيشنهاد مي كنم با خود رشته هاي كيوت يعني كلاس QString كار كنيد، اين رشته ها از يوني كد ١٦ استفاده ميكنن و نه تنها به شما قابليت كار با كدينگ هاي مختلف رو مي دن بلكه با ديگر قسمتهاي كيوت سازگاري كامل دارن

كيوت يه فريم ورك جامع هست و تركيب اون با كتابخونه هاي ديگه خوب نيست و مي تونه بداتون مشكلاتي رو ايجاد كنه، تا زماني كه كيوت امكاني رو براي شما فراهم مي كنه سراغ كتابخونه هاي ديگه نريد حتي اگر كارتون كمي سختر بشه

sourcecode
پنج شنبه 15 بهمن 1394, 17:59 عصر
برای رفع مشکلم نباید ios::binary رو بنویسم

f1.open("d:/test.doc",ios::out);