קריאת שורה מקובץ

VoodooKid

New member
קריאת שורה מקובץ

שלום יש לי קובץ טקסט שלא נכתב על ידי. הוא לא כתוב ב char אלא ב wchar_t. אני רוצה לקרוא כל פעם שורה אחת מהקובץ מישהו מכיר פקודה שעושה את זה?? כי fread קוראת עד סוף הקובץ או עד שמגיעים לLIMIT שנתנו לפונ' תודה מראש
 

galh

New member
אז ככה..

תוודא שהגדרת ע"י define# את UNICODE_ ואז הפונקציות של ה- c-runtime יעבדו עם wchar_t. תפתח את הקובץ במצב של text, עם "rt" (אם אני זוכר נכון) ותקרא שורה ע"י fgets.
 

VoodooKid

New member
זה מה שאני עשיתי אבל...

הוא לא קורא את זה נכון אחרי כל תו הוא מוסיף לי 0 כלומר נניח שיש במערך 10 תאים חצי מהם הם 0 וחצי הם התו הנכון. למה זה ככה???
 

פרסאוס

New member
אני מניח שאתה קורא קובץ באנגלית

ב unicode התווים באנגלית שווים לאילו ש ב ANSI, רק שבגלל גודל התו, מוסיפים בית 0. זה למה. אני מציע לך לעבוד עם wchar_t שאיתו אני עובד כבר שנים. עובד מצויין.
 

VoodooKid

New member
גם את זה ניסיתי ...

אני קורא שורה מהקובץ בעזרת fgetws(wchar_t) וזה עדיין נותן לי את הבעיה הזאת. פתרתי את זה ע"י פונ' שאני בניתי שתוריד את הרווחים אבל זה לא הפתרון הכי יפה אם יש לך הצעה אחרת אני מעוניין!!! תודה!!
 

selalerer

New member
אני חושב שהבעיה היא שאתה קורא בסדר

, כwchar_t אבל אח"כ במוניפילציות ובהדפסה אתה מתייחס אליו כאל char רגיל. הפונקציה שעשית ממירה לך מwchar_t לchar עבור אותיות באנגלית, ולכן היא כאילו פותרת את הבעיה. הפתרון האמיתי בשבילך הוא להמשיך להתייחס אל מה שקראתי כwchar_t גם בפונקציות הפלט וגם במוניפילציות על הטקסט.
 

VoodooKid

New member
זה במצב DEBUG

אני רואה את הרווחים האלו כאשר אני עושה DEBUG. אני שם WATCH על המשתנה
 

פרסאוס

New member
ההצעה שלי היא

לא לקרוא בשורות אלא בבתים ולחלק לשורות בעצמך. הרבה יותר יעיל. אני משתמש בפונקציות של windows ולא ב runtime, אלא אם אתה באמת מתכוון לעבוד גם בלינוקס.
 

VoodooKid

New member
אני עובד עם WINDOWS.

חבל לי להסתבך עם מניפולציות כאלה. אני יבנה פונ' שמורידה את האפסים האלה זה יותר פשוט מאשר להתעסק עם בתים
 

voguemaster

New member
יש כבר פונקציות שעושות את ההמרה

נסה את WideCharToMultiByte, אתה יכול להשתמש בה בחלונות (בין אם אפליקציה רגילה או קונסול). גם ל- std::wstring אמור להיות משהו כזה היות והמחרוזות של הספריה הסטנדרטית אמורות לתמוך ב-locales. בכל אופן, יש גם את המחרוזות wsnprintf ובעצם את כל הפונקציות לטיפול במחרוזות, בגרסתן ה-wide. אין שום צורך לכתוב משהו מחדש.
 

galh

New member
הוא קורא את זה נכון.

תתחיל בלקרוא את המאמר של יואל על UNICODE בשביל להבין קצת מה זה UNICODE ולמה יש לך אפסים בתוך המחרוזת. אחר כך, בהנחה שאתה עובד עם הסטודיו של MS, תלך ל- Tools >> Options >> Debug ותוסיף "V" על Display unicode strings. אגב, לפי מה שאתה מתאר, אתה מסתכל על ה- buffer שלך בתור char ולא wchar_t.
 

VoodooKid

New member
תודה על כל הטיפים

תודה על העצה זאת בטח הסיבה אבל אני ישתמש בפונ' שפשוט תוריד את האפסים. תודה בכל מיקרה!!!
 

galh

New member
הוא אנטי-יוניקוד...

שמעתי שיש אנשים כאלו, חיים עדיין בתקופת האנסי-אסקיי הקדומה.
 
למעלה