Jump to content
  • הצטרפו למשפחה

    היי, היי אתה (או את) שם!

    אנחנו יודעים, נחמד להיות אנונימי, ולמי בכלל יש כוח להירשם או להיות עכשיו "החדשים האלה".

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

    אז קדימה, למה אתם מחכים? בואו והצטרפו ותהיו חלק מהמשפחה הקצת דפוקה שלנו.
     

dir="rtl" style="text-align:right;"> שימו לב! השרשור הזה בן 4500 ימים, שזה ממש ממש הרבה ולכן הוא ננעל.

אם אתם פותחי השרשור ו/או יש לכם עדכון רלוונטי לנושא - פנו לאחד המנהלים ונפתח את השרשור חזרה לתגובות.

פוסטים מומלצים

פורסם
גם ב-C++ זה קליל (C++11, כי אני מגניב):

 

גרסא צבעונית ב- http://pastebin.ca/2648163



[LFT]


#include
#include
#include
#include
#include
#include


int main(int argc, char* argv[])
{
if (argc

std::vector<:string> one;
std::vector<:string> two;


std::ifstream a(argv[1]);
std::ifstream b(argv[2]);


std::copy(std::istream_iterator<:string>(a),
std::istream_iterator<:string>(),
std::back_inserter(one));


std::copy(std::istream_iterator<:string>(b),
std::istream_iterator<:string>(),
std::back_inserter(two));


for(auto i : two) {
auto s = std::find(one.begin(), one.end(), i);
if (s != one.end()) { one.erase(s); }
}


std::copy(one.begin(), one.end(),
std::ostream_iterator<:string>(std::cout, "\n"));
}



 

זוועה (זה לא אתה, זו השפה).

למכירה פנסים קדמיים מקוריים חדשים לGTI MKV

 

My grandfather rode a camel, my father rode a camel, I drive a Mercedes, my son drives a Land Rover, his son will drive a Land Rover, but his son will ride a camel -

Rashid bin Saeed Al Maktoum

  • תגובות 55
  • פורסם
  • תגובה אחרונה

המגיבים הפעילים ביותר בשרשור

המגיבים הפעילים ביותר בשרשור

תמונות שפורסמו בשרשור

פורסם
זוועה (זה לא אתה, זו השפה).

 

מסכים לחלוטין, למרות ש C++11 דווקא מתחילה להיראות יותר אלגנטית (auto, nullptr, למבדות).

Leasingfahrzeug oder nichts

פורסם

מה יש לכם נגד C++?

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

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

 

דיטו הייתי מחליף לwstring wifstream wofstream ככה שהתוכנה תעבוד ביוניקוד.

ליאור

מאזדה 3 2.0 "ספיריט" 2020

בתאריך 12.5.2021 בשעה 13:54, יבגניפ כתב:

באמת. אני אוהב אותך כמו שאתה.

יבגני כבר לא אוהב אותי 😭

פורסם

זה לא משנה, היות ואנחנו לא עושים עיבוד על הסטרינגים (std::string מחזיק char בפנים) אלא רק משווים אותם אחד לשני.

Leasingfahrzeug oder nichts

פורסם
מה יש לכם נגד C++?

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

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

 

דיטו הייתי מחליף לwstring wifstream wofstream ככה שהתוכנה תעבוד ביוניקוד.

או, נגעת בנקודה.

שים לב! לא היה פה שום סי שארפ או ג׳אווה או זוועות מהסוג הזה

(שאגב, היו דורשות לא פחות שורות מ-c++),

אלא פייתון, שרץ בכל מכונה שהיא, בפחות שורות ובלי סוגריים מסולסלים.

יש בשפה הזאת מעין איזון מוצלח במיוחד, להבדיל מההיפסטריות של רובי.

 

פחות שורות = פחות טעויות.

(ותודה ל-ditto שמזכיר לי שוב ושוב עד כמה אני עוד צריך ללמוד)

אוכל את הכובע שהגיש לי avergel ומודה קבל עם ועדה שלפעמים מחשבים של אסוס מחזיקים מעמד אפילו מעל לשנה שלמה - אם נזכרים לעדכן את ה-bios.

פורסם

פחות שורות = פחות טעויות.

(ותודה ל-ditto שמזכיר לי שוב ושוב עד כמה אני עוד צריך ללמוד)

 

אין על מה. אגב, היה ברדיט דיון מעניין על "קוד יפה" לפני שנה בערך -

Leasingfahrzeug oder nichts

פורסם (נערך)
זה לא משנה, היות ואנחנו לא עושים עיבוד על הסטרינגים (std::string מחזיק char בפנים) אלא רק משווים אותם אחד לשני.

 

בטח שמשנה! אם נניח שהקובץ שנתנו לתוכנה שלך מקודד ב-Unicode כי ככה הוא נשמר ע"י Notepad, אתה תקבל למעשה במקום כתובת מייל [email protected] בתור סטרינג, 7 סטרינגים של כל אות ועוד סטרינגים ריקים כי a שמקודד ב-Unicode נראה 0x0061 כך שה-string שלך בעצם ייקרא אותו כשתי אותיות, אחת 00 שזה Terminating Null (מוכר בערך '\0') ואחריו את האות a, השטרודל יקודד במקור כ-0x0040 וייקרא בתור Terminating Null ואחריו סטרינג חדש שיהיה שטרודל.

 

או, נגעת בנקודה.

שים לב! לא היה פה שום סי שארפ או ג׳אווה או זוועות מהסוג הזה

(שאגב, היו דורשות לא פחות שורות מ-c++),

אלא פייתון, שרץ בכל מכונה שהיא, בפחות שורות ובלי סוגריים מסולסלים.

יש בשפה הזאת מעין איזון מוצלח במיוחד, להבדיל מההיפסטריות של רובי.

 

פחות שורות = פחות טעויות.

(ותודה ל-ditto שמזכיר לי שוב ושוב עד כמה אני עוד צריך ללמוד)

 

אני מאוד לא תומך בטענה הזו של פחות שורות = פחות טעויות.

עדיף 100 שורות ברורות וקצרות מאשר 5 שורות דחוסות, ארוכות וקשות להבנה בקריאה ראשונה.

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

קוד יותר ברור = פחות טעויות.

 

אגב רועי אני מאוד מסכים איתך, שזה זוועה, אבל זה בעיקר בגלל ש-Dittohead לא השתמש ב-using (ראה קוד אצלי למטה) מה שהיה מעיף את כל ה-std:: המיותרים

 

למי שמעניין אותו הקוד אז זה:

#include "stdafx.h"
#include 
#include 
#include 
#include 


using std::wcout;
using std::wcin;
using std::endl;
using std::wifstream;
using std::wofstream;
using std::vector;
using std::wstring;


int _tmain(int argc, _TCHAR* argv[])
{
   if (argc  4)
   {
       wcout  "         wcin.ignore();
       return 1;
   }


   wifstream fileOriginal(argv[1]), fileRemove(argv[2]);
   if (!fileOriginal.is_open())
       wcout 

   if (!fileRemove.is_open())
       wcout 

   if (!fileRemove.is_open() || !fileOriginal.is_open())
   {
       fileOriginal.close();
       fileRemove.close();


       wcout         wcin.ignore();
       return 1;
   }


   vector vecRemove;


   wofstream fileNew(argv[3]);
   wstring strTemp;
   while (getline(fileRemove, strTemp))
       vecRemove.push_back(strTemp);


   int nRemoved = 0;
   while (getline(fileOriginal, strTemp))
   {
       bool bFound = false;
       for (size_t i=0; i            if (0 == strTemp.compare(vecRemove[i]))
               bFound = true;


       if (!bFound)
           fileNew         else
           ++nRemoved;
   }

   fileNew.close();
   fileOriginal.close();
   fileRemove.close();


   wcout     wcout     wcin.ignore();


   return 0;
}



ניתן לראות בקוד חלקים ברורים:

1. בדיקת פרמטרים (מספר פרמטרים, ששמות הקבצים תקינים, שהקבצים קיימים ונפתחים.

2. העתקת רשימת השורות למחיקה מהקובץ לתוך vector לעבודה יותר נוחה (מן הסתם תמיד קובץ ההסרה יהיה קטן מקובץ הכתובות המלא).

3. מעבר על קובץ הכתובות המלא, ובדיקה של כל כתובת מול וקטור ההסרה, האם הוא קיים שם ע"י wstring.compare, כל כתובת שלא נמצאה נזרקת ישירות לקובץ ה-Output המסונן, אם נמצאה אז ספירת השורה כהוסרה (כך לא נספור כתובות להסרה שלא הופיעו בקובץ הכתובות המלא) לפי בקשת צביקה.

4. ניקוי והודעות למשתמש - סגירת הקבצים, הצגה של מספר השורות שהוסרו וסיום.

 

הערה: השימוש ב-wifstream, wofstream, wstring הוא לציין widechar (השם המיקרוסופטי ל-Unicode), כך שלא משנה כיצד מקודד הקובץ המקורי לא יהיו לנו בעיות.

הערה2: wcin.ignore() למעשה מתעלמת מהקשת מקלדת (Press any key to...).

LineRemover.zip

עריכה אחרונה על ידי m3x7r3m3

ליאור

מאזדה 3 2.0 "ספיריט" 2020

בתאריך 12.5.2021 בשעה 13:54, יבגניפ כתב:

באמת. אני אוהב אותך כמו שאתה.

יבגני כבר לא אוהב אותי 😭

פורסם
בטח שמשנה! אם נניח שהקובץ שנתנו לתוכנה שלך מקודד ב-Unicode כי ככה הוא נשמר ע"י Notepad, אתה תקבל למעשה במקום כתובת מייל [email protected] בתור סטרינג, 7 סטרינגים של כל אות ועוד סטרינגים ריקים כי a שמקודד ב-Unicode נראה 0x0061 כך שה-string שלך בעצם ייקרא אותו כשתי אותיות, אחת 00 שזה Terminating Null (מוכר בערך '\0') ואחריו את האות a, השטרודל יקודד במקור כ-0x0040 וייקרא בתור Terminating Null ואחריו סטרינג חדש שיהיה שטרודל.

 

השוואה כמו שנדרש ע"י פות"ש תעבוד גם עם std::string רגיל, בהנחה והקידוד של הקבצים הוא זהה. תנסה ותראה:



[left]$ cat gen.py && python gen.py && ./filter 1.txt 2.txt 
one = ["[email protected]", "[email protected]", "[email protected]", "[email protected]", ]
two = ["[email protected]", "[email protected]" ]


with open("1.txt", "wb") as o:
    o.write("\n".join([x.encode('utf16') for x in one]))


with open("2.txt", "wb") as o:
    o.write("\n".join([x.encode('utf16') for x in two]))


��[email protected]
��[email protected][/left]




Leasingfahrzeug oder nichts

פורסם (נערך)

בוא נלך להכי Low-Level שאפשר.

 

כתבתי [email protected] דרך Notepad ושמרתי בקידוד Unicode.

הקובץ שלי מבחינה בינארית יהיה כזה:

 

FF FE 61 00 40 00 61 00 2E 00 63 00 6F 00 6D 00

 

נתעלם מה-Header של FF FE אתה רואה כאן את המידע בצורת Little Endian.

נניח שאם ה-getline שלך ממומש כך שהוא מחפש את ה-'\n' תקבל בתוך הבאפר של הסטרינג אמנם את כל הדאטה, אבל compare יסיים את תפקידו מייד עם ה-00 הראשון.

 

כך אגב זה גם מזוהה ב-Debug ב-VS2010, הוא מציג רק a.

 

כמו שאמרתי אין לי מושג בפיית'ון אני מדבר נטו על C++.

 

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

עריכה אחרונה על ידי m3x7r3m3

ליאור

מאזדה 3 2.0 "ספיריט" 2020

בתאריך 12.5.2021 בשעה 13:54, יבגניפ כתב:

באמת. אני אוהב אותך כמו שאתה.

יבגני כבר לא אוהב אותי 😭

פורסם
בוא נלך להכי Low-Level שאפשר.

 

כתבתי [email protected] דרך Notepad ושמרתי בקידוד Unicode.

הקובץ שלי מבחינה בינארית יהיה כזה:

 

FF FE 61 00 40 00 61 00 2E 00 63 00 6F 00 6D 00

 

נתעלם מה-Header של FF FE אתה רואה כאן את המידע בצורת Little Endian.

נניח שאם ה-getline שלך ממומש כך שהוא מחפש את ה-'\n' תקבל בתוך הבאפר של הסטרינג אמנם את כל הדאטה, אבל compare יסיים את תפקידו מייד עם ה-00 הראשון.

 

כך אגב זה גם מזוהה ב-Debug ב-VS2010, הוא מציג רק a.

 

כמו שאמרתי אין לי מושג בפיית'ון אני מדבר נטו על C++.

 

תגיד, קראת בכלל את הקוד שפרסמתי קודם לכן ב-C++? אתה יודע מה זה istream_iterator?

Leasingfahrzeug oder nichts

פורסם

לא יודע מה איתך, אבל כשאני למדתי C++, למדתי שהאופרטור

לפי זה זו גם הצורה שבה עובד ה-istream_iterator.

ליאור

מאזדה 3 2.0 "ספיריט" 2020

בתאריך 12.5.2021 בשעה 13:54, יבגניפ כתב:

באמת. אני אוהב אותך כמו שאתה.

יבגני כבר לא אוהב אותי 😭

פורסם

מעבר קליל כי לא התעמקתי עדיין ב-C++ 11.

אבל עכשיו כשחיפשתי על istream_iterator יצאה תשובה מטרידה.

 

למיטב זכרוני (וזה נטו מהזיכרון) ה-std::copy עובד עם ה-++ של האיטרטור שהוא מקבל, שלפי הלינק הקודם זה מפעיל את האופטרטור

ליאור

מאזדה 3 2.0 "ספיריט" 2020

בתאריך 12.5.2021 בשעה 13:54, יבגניפ כתב:

באמת. אני אוהב אותך כמו שאתה.

יבגני כבר לא אוהב אותי 😭

פורסם

תקמפל את הקוד שלי ותריץ אותו על רשימה של כתובות מייל מקודדות ב-UTF-16, תעדכן אותי איך הלך ואיך זה עובד (אפילו שזה לא std::wstring).

Leasingfahrzeug oder nichts

פורסם

לא מתקמפל תחת VS2010 ובעבודה אין לי משהו אחר.

 

אם היה מתקמפל לי לא הייתי צריך לחפש בגוגל נכון? ;)

ליאור

מאזדה 3 2.0 "ספיריט" 2020

בתאריך 12.5.2021 בשעה 13:54, יבגניפ כתב:

באמת. אני אוהב אותך כמו שאתה.

יבגני כבר לא אוהב אותי 😭


×
×
  • תוכן חדש...