דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. לא מצליח לגשת למשתנה בתוך תנאי #C

לא מצליח לגשת למשתנה בתוך תנאי #C

מתוזמן נעוץ נעול הועבר תכנות
30 פוסטים 4 כותבים 542 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • אורייא מנותק
    אורייא מנותק
    אוריי
    כתב ב נערך לאחרונה על ידי אוריי
    #1

    יש לי משתנה שמחשב פער בין 2 תאריכים שפתחתי בתוך תנאי IF כך

    if (AnHourOnCamera > datenow)
    {   
    var Seconds1 =  Seconds2 - Seconds2 * 2;
    Console.WriteLine(Seconds1);
    }
    

    תכלס אני לא מצליח למצוא אותו בספריה וכאשר אני רושם אותו הוא מחזיר שגיאה שהוא לא קיים
    ניסיתי להיעזר בזה
    והוספתי את המשתנה לפני הIF אבל אז הוא החזיר לי שגיאה לגבי הערכים שהכנסתי.

    var Seconds1 = 0;
    

    8d20b366-d968-41ec-88e7-418d1b91e17c-image.png
    וזה השגיאה

    Cannot implicitly convert type 'type' to 'type'
    

    אשמח שיאירו את עיני איפה הטעות שלי.. 😞

    ניתן לפנות אלי גם ב al0548446188@gmail.com
    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

    OdedDvirO תגובה 1 תגובה אחרונה
    0
    • OdedDvirO מחובר
      OdedDvirO מחובר
      OdedDvir
      השיב לאוריי ב נערך לאחרונה על ידי OdedDvir
      #2

      @אוריי השגיאה כתובה בפירוש: אתה מנסה לבצע המרה לא מפורשת בין שני משתנים.
      תגדיר את סוג המשתנה במדוייק כ- int ואל תשתמש ב var איפה שלא באמת צריך:

      int seconds1 = 0;
      
      dovidD תגובה 1 תגובה אחרונה
      2
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        השיב לOdedDvir ב נערך לאחרונה על ידי
        #3

        @odeddvir
        אם הבעיה היא המרה לא מפורשת, אז היא נשארה לא מפורשת. הצורה לפרש המרה היא רק ע"י קאסטינג: סוגריים עגולות לפני הביטוי שממירות מפורשות לטיפוס שתומך בהמרה הזו.
        var מסיק את הסוג לפי המשך הביטוי, אני חושב שאין מצב ששינוי var לטיפוס תעזור.

        @אוריי הטיפוס Second2 הוא כנראה מסוג תאריך או TimeSpan ולכן כנראה לביטוי שלך אין משמעות. תעשה נקודה אחרי הSecond2 ובחר בSeconds או TotalSeconds ואז אתה מקבל את מספר השניות ולא את כל האובייקט שמייצג את הזמן הכולל.
        (פעם הבאה אנא כלול בקוד את ההצהרה/יצירה של המשתנים הרלוונטים).

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        אורייא yossizY 2 תגובות תגובה אחרונה
        3
        • אורייא מנותק
          אורייא מנותק
          אוריי
          השיב לdovid ב נערך לאחרונה על ידי
          #4

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

          using System;
          using System.IO;
          
          namespace ChangeChangeDate
          {
              class Program
              {
          
                  static void Main(string[] args)
                  {
                      DateTime AnHourOnCamera = new DateTime(2020, 7, 4, 0, 0,0);
                      DateTime datenow = DateTime.Now;
                      int Seconds2 = (int)datenow.Ticks - (int)AnHourOnCamera.Ticks;
                      int Seconds1 = 0;
          
                          if (Seconds2 < 0)
                          {   
                              Seconds1 =  Seconds2 - Seconds2 * 2;
                              Console.WriteLine(Seconds1);
                          }
                          Console.WriteLine(Seconds2);
                          
          
                      string[] fileArray = Directory.GetFiles(Directory.GetCurrentDirectory() + @"\");
                      foreach (string item in fileArray)
                      {
          
                          if (item == Directory.GetCurrentDirectory() + @"\ChangeChangeDate.exe")
                          {
                              //ללא פעולה
                          }
                          else
                          {
                          DateTime lastModified = File.GetLastWriteTime(item);
                              int updateDate = 0;
                              if (Seconds2 < 0)
                              {
                                 updateDate = (int)lastModified.Ticks - Seconds1;
                              }
                              else
                              {
                                 updateDate = (int)lastModified.Ticks + Seconds2;
                              }
          
                              DateTime UD = new DateTime(updateDate);
                              Console.WriteLine(UD);
          
                              if (!File.Exists(item))
                              {
                                  File.Create(item);
                              }
                              else
                              {
                                  Console.WriteLine($"{item}\n{lastModified}\n{updateDate}");
                                  //File.SetLastWriteTime(item, new DateTime(ee.Year,ee.Month, ee.Day, ee.Hour,ee.Minute, ee.Second));
                              }
                          }
                      }
                  }
              }
          }
          

          אמנם מה ש @OdedDvir כתב עזר ברגע שעשיתי לו המרה מפורשת.
          אבל משום מה הקוד לא עובד טוב בשורה 42
          שמשום מה הוא מגיע למספר שלילי אע"פ ששני המספרים שהוא מקבל הם חיוביים וזה פעולת חיבור ...
          אולי זה בגלל סוג המשתנה (כלומר אני צריך להשתמש במשתנה אחר?..

          ניתן לפנות אלי גם ב al0548446188@gmail.com
          ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

          OdedDvirO dovidD 2 תגובות תגובה אחרונה
          0
          • OdedDvirO מחובר
            OdedDvirO מחובר
            OdedDvir
            השיב לאוריי ב נערך לאחרונה על ידי OdedDvir
            #5

            @אוריי נראה לי שאפשר לפשט את התהליך בהרבה:

            using System;
            using System.IO;
             
            namespace ChangeChangeDate
            {
                class Program
                {
                    static void Main(string[] args)
                    {
                        DateTime AnHourOnCamera = new DateTime(2020, 7, 4, 0, 0,0);
                        DateTime datenow = DateTime.Now;
                        // חישוב ההפרש בימים
                        int daysDifference = (AnHourOnCamera - datenow).Days;
                        // .....
                        // .....
                        // .....
                       DateTime lastModified = File.GetLastWriteTime(item);
                       // חישוב התאריך הנכון על ידי הוספת ההפרש לתאריך הקיים
                       DateTime correctDate = lastModified.AddDays (daysDifference);
                       Console.WriteLine(correctDate);
            // וכו'..........
            תגובה 1 תגובה אחרונה
            3
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              השיב לאוריי ב נערך לאחרונה על ידי
              #6

              @אוריי סליחה על החריפות אבל אתה עושה דברים בלי להבין.
              Ticks זה בכלל לא שניות. זה מספר מטיפוס Long שמייצג את מספר אלפיות השניה שעברו מתחילת התאריך הלועזי (01/01/001). זה מספר אדיר, ואם אתה שובר אותו לint אתה פשוט מאבד את המידע.
              אתה לא צריך להמיר לint ובכלל לא צריך להתעסק עם הTicks וגם לא עם השניות.
              לא אמור לעניין אותך שניות כי אמור לעניין אותך ההפרש בין התאריך שבצלמה לתאריך הנוכחי ואת ההפרש הזה להוסיף לכל תמונה ותמונה.

              בשביל לבנות כזה קוד, אתה כותב פיסת קוד נסיונית קטנה שמכילה רק את מה שרלוונטי:

               var offset = DateTime.Now - new DateTime(2020, 7, 4, 8, 30, 0);
              
              var currFileDate = new DateTime(2020,6,24,15,42,0);
               var fixedDate = currFileDate + offset;
              

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

              אם הכל עובד בדוגמה (תמיד תתחיל מדוגמאות)
              תעשה את זה על הקבצים.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              dovidD אורייא 2 תגובות תגובה אחרונה
              5
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                השיב לdovid ב נערך לאחרונה על ידי dovid
                #7

                אני כתבתי לך את הקוד כדי להקל על השיעורי בית וללמד אותך עוד טיפ או שניים:

                var offset = DateTime.Now - new DateTime(2020, 7, 4, 8, 30, 0);
                
                Console.WriteLine("Offset is: " + offset.ToString());
                
                var fileArray = Directory.GetFiles(".", "*.jpg");
                foreach (string item in fileArray)
                {
                    var createdAt = File.GetCreationTime(item);
                    var fixedCreatedAt = createdAt + offset;
                
                    File.SetCreationTime(item, fixedCreatedAt);
                
                    Console.WriteLine($"{item}\n{createdAt}\n{fixedCreatedAt}\n--------");
                }
                

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                yossizY אורייא 2 תגובות תגובה אחרונה
                4
                • yossizY מנותק
                  yossizY מנותק
                  yossiz
                  השיב לdovid ב נערך לאחרונה על ידי yossiz
                  #8

                  @dovid הסוג TimeSpan יש לו תמיד אורך חיובי? נראה מתוך הקוד של @אוריי שהוא רוצה לטפל גם במקרה של אורך שלילי.
                  עריכה: מסתבר ש-TimeSpan יכול לכלול ערך שלילי

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  dovidD תגובה 1 תגובה אחרונה
                  1
                  • yossizY מנותק
                    yossizY מנותק
                    yossiz
                    השיב לdovid ב נערך לאחרונה על ידי
                    #9

                    @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                    var מסיק את הסוג לפי המשך הביטוי, אני חושב שאין מצב ששינוי var לטיפוס תעזור.

                    חוץ ממקרה שבו הטיפוס לא ברור מתוך ההצהרה.

                    var seconds1 = 0;
                    

                    נהיה Int בברירת מחדל.
                    אבל אולי רצית Long?

                    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                    dovidD תגובה 1 תגובה אחרונה
                    1
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      השיב לyossiz ב נערך לאחרונה על ידי
                      #10

                      @yossiz ברור שיכול להיות שלילי, אבל כיון שכל הoffset מושתת על hard-code של זמן המצלמה, אז במקרה שהתאריך יותר גדול מהנוכחי יש להפוך את הכיוון. לפי המציאות ולפי הפרטים החלטתי שאין מקום לבדיקה אם זה שלילי או חיובי גם לו זה היה דינמי.

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      yossizY תגובה 1 תגובה אחרונה
                      2
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        השיב לyossiz ב נערך לאחרונה על ידי
                        #11

                        @yossiz אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                        נהיה Int בברירת מחדל.
                        אבל אולי רצית Long?

                        זה לא מדוייק.
                        0 זה באמת int ולא long.
                        הסיבה שאם כותבים long זה יעבוד כי תמיד אפשר להציב int בתוך long בהמרה מרומזת כי אין איבוד מידע.

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        yossizY תגובה 1 תגובה אחרונה
                        1
                        • yossizY מנותק
                          yossizY מנותק
                          yossiz
                          השיב לdovid ב נערך לאחרונה על ידי
                          #12

                          @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

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

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

                          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                          dovidD תגובה 1 תגובה אחרונה
                          1
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            השיב לyossiz ב נערך לאחרונה על ידי
                            #13

                            @yossiz צודק, טעות שלי, הרגע עמדתי עליה.
                            הקוד יעבוד היטב גם אם זה שלילי.

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            תגובה 1 תגובה אחרונה
                            2
                            • yossizY מנותק
                              yossizY מנותק
                              yossiz
                              השיב לdovid ב נערך לאחרונה על ידי
                              #14

                              @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                              0 זה באמת int ולא long.
                              הסיבה שאם כותבים long זה יעבוד כי תמיד אפשר להציב int בתוך long בהמרה מרומזת כי אין איבוד מידע.

                              לא ברור לי אם אתה מתווכח על משהו אקדמי בלי שום השלכה מעשית? כי בכל מקרה ההצהרה ש:

                              אין מצב ששינוי var לטיפוס תעזור

                              לא נכונה.

                              טסט:

                              var i = 1;
                              i += int.MaxValue;
                              Console.WriteLine($"i = {i}");
                              
                              long j = 1;
                              j += int.MaxValue;
                              Console.WriteLine($"j = {j}");
                              
                              // Output:
                              // i = -2147483648
                              // 
j = 2147483648
                              

                              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                              dovidD תגובה 1 תגובה אחרונה
                              1
                              • dovidD מנותק
                                dovidD מנותק
                                dovid ניהול
                                השיב לyossiz ב נערך לאחרונה על ידי
                                #15

                                @yossiz צודק. ואני אכן טעיתי שלא לקחתי בחשבון המרות מרומזות.
                                (כעת מעניין אותי אם תבין למה אני עדיין מחזיק מהמשפט שלי).

                                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                yossizY תגובה 1 תגובה אחרונה
                                1
                                • yossizY מנותק
                                  yossizY מנותק
                                  yossiz
                                  השיב לdovid ב נערך לאחרונה על ידי
                                  #16

                                  @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

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

                                  לא...

                                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • אורייא מנותק
                                    אורייא מנותק
                                    אוריי
                                    השיב לdovid ב נערך לאחרונה על ידי אוריי
                                    #17

                                    @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                                    @אוריי סליחה על החריפות אבל אתה עושה דברים בלי להבין.

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

                                    @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                                    בשביל לבנות כזה קוד, אתה כותב פיסת קוד נסיונית קטנה שמכילה רק את מה שרלוונטי:

                                    את האמת התחלתי גם מחתיכת קוד ניסיונית והכל עבד מעולה ומשם המשכתי. אך מה שקרה זה שבעת שהמרתי לint התחילו הצרות (מה שהתברר כטעות).

                                    @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                                    אני כתבתי לך את הקוד כדי להקל על השיעורי בית וללמד אותך עוד טיפ או שניים:

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

                                    ניתן לפנות אלי גם ב al0548446188@gmail.com
                                    ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                                    תגובה 1 תגובה אחרונה
                                    2
                                    • אורייא מנותק
                                      אורייא מנותק
                                      אוריי
                                      השיב לdovid ב נערך לאחרונה על ידי אוריי
                                      #18

                                      @dovid
                                      דבר אחד לא הבנתי בקוד זה השורה הזו

                                      @dovid אמר בלא מצליח לגשת למשתנה בתוך תנאי #C:

                                      var fileArray = Directory.GetFiles(".", "*.jpg");
                                      

                                      השאלה היא למה כתבת כך ומה ההבדל אם יש? (חוץ מהאורך של הקוד).
                                      אני קודם כתבתי כך :

                                      var fileArray = Directory.GetFiles(Directory.GetCurrentDirectory() + @"\");
                                      

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

                                      ניתן לפנות אלי גם ב al0548446188@gmail.com
                                      ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                                      OdedDvirO תגובה 1 תגובה אחרונה
                                      0
                                      • OdedDvirO מחובר
                                        OdedDvirO מחובר
                                        OdedDvir
                                        השיב לאוריי ב נערך לאחרונה על ידי OdedDvir
                                        #19

                                        @אוריי התחביר של Directory.GetFiles הוא כזה:

                                        Directory.GetFiles(<search_pattern>)
                                        

                                        הנתיב "." פירושו התיקיה הנוכחית והוא זהה לתוצאה של:

                                        Directory.GetCurrentDirectory() + @"\"
                                        

                                        הפרמטר השני שהוסיף @dovid הוא תבנית החיפוש, ויש הגיון לחפש רק בקובצי תמונה ולא לשנות את התאריך של קבצים אחרים שבמקרה קיימים בתיקיה.

                                        אורייא תגובה 1 תגובה אחרונה
                                        3
                                        • אורייא מנותק
                                          אורייא מנותק
                                          אוריי
                                          השיב לOdedDvir ב נערך לאחרונה על ידי
                                          #20

                                          @odeddvir
                                          כפי איך שאני מבין @dovid כתב לחפש בסיומת jpg ותכלס הוא מחזיר גם תמונות וגם הסרטות מה שכעת אני מבין שזה לא סיומת וזה אני שואל מה זה???....

                                          ניתן לפנות אלי גם ב al0548446188@gmail.com
                                          ותמיד... אבל תמיד תוכלו לשאול אותי ב :) כאן שאלות באקסל

                                          OdedDvirO תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום