PDA

View Full Version : سوال: خواندن فایل فارسی



kamper
جمعه 12 دی 1393, 19:03 عصر
سلام.

من می‌خواهم برنامه‌ای بنویسم که یک فایل که محتویاتش فارسی است را بخواند و به عنوان مثال چاپ کند چند بار حرف «ب» در فایل تکرار شده‌است. هر چه جستجو کردم چیزی پیدا کردم.

کسی می‌تونه این برنامه رو بنویسه؟

ممنون.

rahnema1
جمعه 12 دی 1393, 22:07 عصر
سلام
فایل فارسی را با انکدینگ unicode یا نام دیگرش ucs2-little endian یا همون utf -16 little endian ذخیره کنید

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
unsigned long long int count = 0;
ifstream file ("myfile.txt", ios::binary);
file.seekg (0, file.end);
int length = file.tellg();
file.seekg (0, file.beg);
vector<wchar_t> wch(length / sizeof(wchar_t) + 1);
file.read (reinterpret_cast<char*> (&wch[0]), length);
for (int i = 1; wch[i] != 0; i++)
{
if (wch[i] == 0x628)
{
count++;
}
}
cout << count;
}

kamper
جمعه 12 دی 1393, 22:53 عصر
سلام
فایل فارسی را با انکدینگ unicode یا نام دیگرش ucs2-little endian یا همون utf -16 little endian ذخیره کنید

#include <iostream>
#include <fstream>
#include <limits>
#include <vector>
using namespace std;
int main()
{
wifstream file ("myfile.txt");
file.seekg (0, file.end);
int length = file.tellg();
file.seekg (0, file.beg);
int count = 0;
vector<wchar_t> wch(length + 1);
file.get(&wch[0], numeric_limits<streamsize>::max());
char32_t* ch32 = reinterpret_cast<char32_t*>(&wch[0]);
for (int i = 0; ch32[i] != 0; i++)
{
if (ch32[i] == 0x60028)
{
count++;
}
}
cout << count;
}


سلام. خیلی خیلی ممنون.
دو تا سؤال کوچیک دیگه هم دارم. اول این که وقتی اجرا می‌کنم کد رو می‌زنه: char32_t was not declared in this scope. مشکل چی ه؟ از DEV C++ استفاده می‌کنم.
سؤال بعدی این هست که اگه بخوام روی همه‌ی حروف الفبا حرکت کنم، نه فقط «ب» باید به جای 0x60028 چی بذارم؟
ممنون.

rahnema1
جمعه 12 دی 1393, 23:56 عصر
در برنامه چند اشکال بود که ویرایش کردم.
devcpp کامپایلرش قدیمیه. از orwelldevcpp استفاده کنید یا codeblocks یا ویژوال استادیو در قسمت options هم گزینه std=c++11 یا std=c++0x فعال باشه
البته جوری برنامه تغییر دادم که فکر کنم در dev هم اجرا بشه
این هم لیست الفبا از الف تا ی

wchar_t alefba []=
{
0x627, 0x628, 0x67e, 0x62a,
0x62b, 0x62c, 0x686, 0x62d,
0x62e, 0x62f, 0x630, 0x631,
0x632, 0x698, 0x633, 0x634,
0x635, 0x636, 0x637, 0x638,
0x639, 0x63a, 0x641, 0x642,
0x6a9, 0x6af, 0x644, 0x645,
0x646, 0x648, 0x647, 0x6cc
};