2 00:00:00,000 --> 00:00:02,470 >> 1 SPEAKER: בואו לכתוב תכנית ש מנחה את המשתמש לשמות ו 3 00:00:02,470 --> 00:00:03,990 בתיהם של שלושה תלמידים. 4 00:00:03,990 --> 00:00:07,300 אבל לא רק להדפיס אותם שמות ובתים למסך, בואו 5 00:00:07,300 --> 00:00:09,660 במקום לשמור את המידע שעל דיסק. 6 00:00:09,660 --> 00:00:14,530 במילים אחרות, בואו ליצור, למשל, CSV קובץ, לערכים מופרדים בפסיקים, 7 00:00:14,530 --> 00:00:17,720 שהוא למעשה רק קובץ טקסט ה תוכניות כמו Excel או מספרים 8 00:00:17,720 --> 00:00:21,690 יכול לפתוח, וביעילות להציל את אלה שמות ובתים באופן קבוע, כך ש 9 00:00:21,690 --> 00:00:23,220 אנחנו יכולים לעיין בהם מאוחר יותר. 10 00:00:23,220 --> 00:00:25,960 >> לשם כך, בואו נסתכל ראשון איזה קוד מוכן מראש שיש לי 11 00:00:25,960 --> 00:00:27,650 התחיל עם כבר. 12 00:00:27,650 --> 00:00:32,380 שים לב הראשון שבין הכותרות למעלה הוא עכשיו lib.h הסטנדרטי אשר 13 00:00:32,380 --> 00:00:36,710 במקרה יש לי כמה פונקציות הקשורות להגיש I / O, קובץ קלט ופלט. 14 00:00:36,710 --> 00:00:39,560 שים לב שאני גם כבר הכריז קבוע בשם תלמידים - 15 00:00:39,560 --> 00:00:42,380 בכל כמוסות - ערכו הוא מקודד קשה כשלושה. 16 00:00:42,380 --> 00:00:45,820 שים לב עכשיו בתוך זה שלי עיקרי תכנית, אני מכריז מערך של 17 00:00:45,820 --> 00:00:50,270 גודל שלושה שימוש קבוע שנקרא תלמידים כל אחד מחבריה הוא 18 00:00:50,270 --> 00:00:51,650 הקלד תלמידים. 19 00:00:51,650 --> 00:00:56,150 >> נזכיר כעת כי סטודנט נצטרך להגדיר כבעל שם ובית שני 20 00:00:56,150 --> 00:01:00,410 אשר הן מחרוזות כמו לכל זה הכרזה מנחה, שעות נקודה. 21 00:01:00,410 --> 00:01:04,680 עכשיו בחזרה בstructs1.c, שים לב שאני יש ללולאה כאן זה הולך 22 00:01:04,680 --> 00:01:06,750 לחזר מאפס עד שלוש. 23 00:01:06,750 --> 00:01:10,020 זה הולך להנחות אותי לשל הסטודנט שם והבית של תלמיד 24 00:01:10,020 --> 00:01:12,310 שוב ושוב ושוב. 25 00:01:12,310 --> 00:01:15,620 >> ואז בחלק התחתון של תכנית זו, שם לב שיש לי עוד ללולאה 26 00:01:15,620 --> 00:01:19,970 זה הולך לשחרר את ה-i של התלמיד שם וביתו של תלמיד ה-i ב 27 00:01:19,970 --> 00:01:21,570 באופן דומה נבנה לולאה. 28 00:01:21,570 --> 00:01:24,480 כדי להיות בטוח, אנחנו יכולים לשלב לולאות אלה לאחד פשוט, אבל אני רוצה 29 00:01:24,480 --> 00:01:28,180 יש לי כמה קטעים שונים של קוד לצורך הדיון כאן. 30 00:01:28,180 --> 00:01:31,920 >> עכשיו בין אלה ללולאות, בואו באמת יש להם עוד, ושל זה 31 00:01:31,920 --> 00:01:35,210 מטרה בחיים היא להציל למעשה את כל שמות אלה והבתים שהם 32 00:01:35,210 --> 00:01:39,810 כרגע ב-RAM לדיסק בצורה ערכים מופרדים בפסיקים. 33 00:01:39,810 --> 00:01:42,080 לשם כך, אנחנו הולכים להשתמש שלוש פונקציות חדשות - 34 00:01:42,080 --> 00:01:47,450 F פתוח, printf F, וקרוב F, אשר פתיחת קובץ, להדפיס לקובץ, ו 35 00:01:47,450 --> 00:01:48,440 לסגור את קובץ. 36 00:01:48,440 --> 00:01:49,690 אנחנו יכולים להשתמש בם באופן הבא. 37 00:01:49,690 --> 00:01:52,110 38 00:01:52,110 --> 00:01:58,240 >> קובץ, בכל כמוסות, שהוא במידה מסוימת של סקרנות ב-C, קובץ מקבל fopen 39 00:01:58,240 --> 00:02:03,020 סוף ציטוט ציטוט ועכשיו לשם קובץ, למשל, students.CSV, אבל אני יכול 40 00:02:03,020 --> 00:02:08,150 קורא לזה משהו ביותר, פסיק ועכשיו אני הולך לציין אחת w בפנים 41 00:02:08,150 --> 00:02:09,390 במרכאות כפולות. 42 00:02:09,390 --> 00:02:13,290 W, כפי שאתם יכולים לנחש כבר, משמעות הדבר היא כי fopen צריך לפתוח קובץ זה 43 00:02:13,290 --> 00:02:17,360 קרא Students.CSV לכתיבה כל כך שאנחנו באמת יכולים לחסוך קצת 44 00:02:17,360 --> 00:02:19,370 תוכן אליו. 45 00:02:19,370 --> 00:02:23,080 >> סימון ליד בואו אם קובץ אינו שווה לריק. 46 00:02:23,080 --> 00:02:25,860 כי אם כן, משהו כנראה השתבש ובמקרה זה אנו 47 00:02:25,860 --> 00:02:28,340 לא צריך להמשיך לנסות כדי להדפיס כל דבר אליו. 48 00:02:28,340 --> 00:02:33,400 אבל אם זה לא ריק, ולאחר מכן פנימי של סוגריים מסולסלים אני הולך לחזר 49 00:02:33,400 --> 00:02:38,030 מאני שווה 0 בעד סטודנטים, ואני הולך 50 00:02:38,030 --> 00:02:40,180 להגדיל i בכל איטרציה. 51 00:02:40,180 --> 00:02:45,750 ובתוך לולאה זו, אני הולך fprintf כדי להדפיס לקובץ - 52 00:02:45,750 --> 00:02:47,940 במיוחד אחד אני כבר פתחתי - 53 00:02:47,940 --> 00:02:54,650 מחרוזת שנראית כמו% s זה,% s קו נטוי הפוך n קרוב ציטוט. 54 00:02:54,650 --> 00:02:58,790 >> ועכשיו אני רוצה לחבר לזה של אלה מצייני הערכים בפועל 55 00:02:58,790 --> 00:03:03,390 שמו של תלמיד ובית שימוש באופרטור הנקודה. 56 00:03:03,390 --> 00:03:10,030 i.name סוגר תלמידים, תלמידים קרוב i.house סוגר סוגריים 57 00:03:10,030 --> 00:03:11,230 נקודת פסיק. 58 00:03:11,230 --> 00:03:16,180 עכשיו מתחת לזה ללולאה, אני פשוט הולך לקרוא fclose של קובץ על מנת 59 00:03:16,180 --> 00:03:18,520 כדי לסגור את סופו של דבר את הקובץ. 60 00:03:18,520 --> 00:03:21,360 >> כעת, כאשר אני מפעיל תכנית זו, שאני לא צריך ממש לראות כל דבר על 61 00:03:21,360 --> 00:03:25,010 מסך, אבל אני צריך להיות אחרי הריצה תכנית זו קובץ בשם 62 00:03:25,010 --> 00:03:29,130 Students.CSV באותה הספרייה ש אני מפעיל את הפקודה שבצריך 63 00:03:29,130 --> 00:03:32,480 מכיל מופרדים בפסיקים רשימת הערכים. 64 00:03:32,480 --> 00:03:34,790 בואו נסתכל. 65 00:03:34,790 --> 00:03:41,690 >> של structs לעשות 1. / סטודנט structs1 שם, נניח דוד, 66 00:03:41,690 --> 00:03:43,140 הוא יחיה במאת'ר. 67 00:03:43,140 --> 00:03:46,890 שמו של הסטודנט, נניח, לורן, היא מתגוררת בוורט. 68 00:03:46,890 --> 00:03:50,800 שמו של הסטודנט, נניח, רוב, הוא יחיה בקירקלנד. 69 00:03:50,800 --> 00:03:54,050 עכשיו, שוב, כצפוי, לא מופיע דבר שקרה, אבל תן לי 70 00:03:54,050 --> 00:03:58,790 קדימה בשורת הפקודה והסוג students.CSV לערוך גרם בתקווה כי 71 00:03:58,790 --> 00:04:00,850 קובץ שאכן קיים. 72 00:04:00,850 --> 00:04:07,010 >> Gedit students.CSV ENTER, ואכן, שם לב שקובץ המכיל אך ורק 73 00:04:07,010 --> 00:04:11,320 טקסט, אבל טקסט מופרד בפסיקים עבור כל שדה, אכן קיים. 74 00:04:11,320 --> 00:04:14,530 אם והיו שאנחנו משתמשים, לא CS50 מכשיר, אבל מק או מוכרים יותר 75 00:04:14,530 --> 00:04:18,080 מחשב, מתברר שאנחנו אכן יכולים לפתוח קובץ CSV עם זה יותר 76 00:04:18,080 --> 00:04:20,400 תכנית מוכרת כמו Excel או מספרים. 77 00:04:20,400 --> 00:04:22,906