עבור לתוכן

קובץ טקסט שמכיל את כל המספרים מ-0 עד 1000000000

Featured Replies

פורסם

איך אפשר להשיג או ליצור קובץ כזה?

פורסם

אתה מתעסק עם איזשהי שפת תכנות ?

פורסם

איך אפשר להשיג או ליצור קובץ כזה?

אם יש לך eclipse אני יכול לכתוב לך קובץ ג'אווה ושתריץ אותו ואחרי זה תעשה COPY PASTE לכתבן או משהו

פורסם

הכי פשוט, start > run > cmd.

שם תרשום:

echo off
for /l %p IN (0,1,1000000000) Do echo %p >> bla.txt

(השורה הראשונה לא קריטית, היא סתם כדי שזה לא ידפיס לך את הכל על המסך)

אבל סביר להניח שזה ייקח הרבה הרבה זמן (והגודל של הקובץ יהיה יותר מ-10 ג'יגה).

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

פורסם

קוד קצר ב C# שעושה את העבודה:


StreamWriter S = new StreamWriter(@"C:\O.txt");
for (Int64 i = 1; i < 1000000000+1; i++)
{
S.WriteLine(i);
S.Flush();
S.BaseStream.Seek(0,SeekOrigin.End);
}

אולי לא הכי יעיל בעולם, אפשר לעשות Flush כל מספר פעמים ולא כל פעם, אבל עובד.

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

פורסם

כמו שציינתי, ב-batch זה מאוד לא יעיל (ניסיתי להריץ על 10000, לקח איזה חצי דקה.... אז אני מניח שאם רוצים פי 100000 מזה זה ייקח איזה חודש).

חוץ מזה, כמו שכבר אמרתי - הקובץ הסופי יהיה ענק, יותר מ-10 ג'יגה.

זה שמעליי - למה לעשות flush בכלל? ולמה לעשות seek?

פורסם
  • מחבר

תודה רבה עזרתם לי מאוד

פורסם

אם לא עושים flush, לא מתבצעת כתיבה לקובץ. לגבי ה Seek , אני לא בטוח אם זה נחוץ כל איטרציה, אבל הייתה לי בעיה עם זה פעם, ככה שלא רציתי להסתבך שוב.

פורסם

א. לרוב אחרי WriteLine יבוצע flush אוטומטית (אני זוכר שזה ככה ב-C, יכול להיות שב-#C זה אחרת).

ב. מספיק לעשות flush פעם אחת בלבד בסוף התוכנית (אלא אם אתה מצפה שהתכנית תעוף מתישהו, מסיבה כלשהי), וגם זה לא נחוץ אם סוגרים את הקובץ כראוי (עושים dispose, או יותר טוב - עובדים עם using).

ג. כמו שאמרתי, ה-seek לא נחוץ בכלל. כל עוד אתה לא נוגע במצביע, הוא תמיד ימשיך לכתוב למקום ממנו המשכת לכתוב (הבעיה יכולה לקרות אם אתה כותב במספר ת'רדים במקביל, מה שאתה לא עושה כאן).

פורסם

פשוט מאוד בהנחה שאתה יודע שפת תיכנות כלשהי אפילו רק את הבסיס, פשוט תעשה לולאה(for מתאימה למקרה זה), תאתחל משתנה ל-0 וכל פעם שהתוכנית תבדוק אם המשתנה קטן או שווה למספר שאתה רוצה להגיע אליו, ואם זה קטן או שווה תקדם את הערך ב1(++) והפקודה הבאה תדפיס את הערך של המשתנה

עד אשר תגיע למספר המבוקש בהצלחה :xyxthumbs:

פורסם

מה זה בכלל flush?

פורסם

אני פחדתי ש Flush בסוף התוכנית, אחרי 1000000000 איטרציות, פשוט יזרוק Exception כי לא יהיה לו מספיק מקום בזיכרון.

פורסם

מה זה בכלל flush?

כתיבה (לקובץ או למסך) אף פעם לא מתבצעת מיד. כשאתה מדפיס משהו, אז התוכנה למעשה שומרת את מה שהדפסת בצד (במשהו שנקרא buffer), ולא באמת כותבת אותו לקובץ. כל כמה זמן, או אחרי פקודות מסויימות, מה שיושב בתוך ה-buffer באמת נכתב (למסך או לקובץ). הסיבה לכך היא שכתיבה לקובץ ולמסך הן פעולות מאוד מאוד איטיות (יחסית), ולכן עדיף לאגור את הפלט בצד, ואחת לכמה זמן לכתוב לקובץ הרבה פלט במכה.

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

הפעולה flush מכריחה את התוכנה לכתוב את מה שב-buffer לתוך הקובץ.

פורסם

חחחחחחחחח מה הבחור צריך קובץ כזה

מה אתה מכין רשימה לברוט פורס ?

חחחחח אנשים ניהיים יותר ויותר משועממים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים