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

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

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

בקשת עזרה עם קוד בc#

מתוזמן נעוץ נעול הועבר תכנות
14 פוסטים 3 כותבים 211 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP מנותק
    pcinfogmachP מנותק
    pcinfogmach
    השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
    #3

    @dovid
    המטרה של הקוד היא לסנן ספרים שלא נמצאים ברשימת הספרים שב -
    Properties.Settings.Default.searchBookList
    (זהו חלק מהפרוייקט שלי ליצור תכנת חיפוש בקבצי טקסט ואני רוצה לתת למשתמש לבחור היכן לחפש והיכן לא אז יש לי קוד אחר שנותן למשתמש לבחור איזה ספרים וזה יוצר את הרשימה ושומר אותה בsettings כדי שיהיה זמין גם לפעם הבאה)

    הקוד עצמו בנוי בצורה כזו:
    הרשימה בעצם היא string עם שמות ספרים מופרדים על ידי פסיק
    הקוד קורא את הsrting וממיר אותו לרשימה (בהתחלה השתמשתי בlist אבל ראיתי שכותבים ש lookup יותר מהיר)
    ואז הוא בודק את המשתנה filePath האם הוא קיים בתוך הרשימה או לא (כך זה נותן אפשרות לסנן כל filepath האם ייכלל בתוך החיפוש או לא)

    למעשה מה שקורה הוא שמתוך רשימה של נגיד 11 ספרים שיש מתוכם 8 שאמורים לחזור כנכונים הbool מחזיר למעשה רק 4 או חמש נכונים ואני תוהה האם הבעיה בקוד או בפרט אחר בתוכנה.

    גמ"ח מידע מחשבים ואופיס

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

      @dovid כתב בבקשת עזרה עם קוד בc#:

      למה שלא תיתן קלט ותגיד מה הפלט שאתה רוצה?

      הקלט לדוגמא הוא:
      filepath = בראשית אור החיים.
      Properties.Settings.Default.searchBookList=בראשית עם ניקוד, בראשית רמב"ן
      במקרה זה הbool אמור להגיד לי שfilepath לא נמצא ברשימה

      משא"כ אם הfilepath היה "בראשית עם ניקוד" או "בראשית רמב"ן"
      הbool אמור להגיד לי שהוא כן קיים ברשימה

      מה שקורה בפועל שהוא מחזיר לי ש"בראשית עם ניקוד" קיים אבל לא "בראשית רמב"ן"

      גמ"ח מידע מחשבים ואופיס

      י תגובה 1 תגובה אחרונה
      0
      • י מנותק
        י מנותק
        יוסף בן שמעון
        השיב לpcinfogmach ב נערך לאחרונה על ידי
        #5

        @pcinfogmach אתה יכול לאשר שזה קורה רק במחרוזת שמכילה מרכאות?

        pcinfogmachP תגובה 1 תגובה אחרונה
        1
        • pcinfogmachP מנותק
          pcinfogmachP מנותק
          pcinfogmach
          השיב ליוסף בן שמעון ב נערך לאחרונה על ידי pcinfogmach
          #6

          תודה לכל העונים כנראה שהבעיה היא אחרת ממה שחשבתי כי עכשיו עשיתי בדיקה עם linqpad והכל עבד כשורה מצו"ב קוד הבדיקה אשב על זה קצת

          static void Main(string[] args)
          {
          	// Manually define a comma-separated string
          	string searchBookList = "בראשית - עם ניקוד,בראשית - עם טעמים,בראשית - ללא ניקוד,בראשית - רש''י,בראשית - רש''י (ב),בראשית - שפתי חכמים,בראשית - רמב''ן,בראשית - תרגום יונתן,בראשית - אור החיים,בראשית - אבן עזרא,בראשית - בעל הטורים,בראשית - תרגום אונקלוס,בראשית - ספורנו,בראשית - כלי יקר,בראשית - דעת זקנים,מדרש רבה - חומש בראשית,מדרש תנחומא - בראשית,ילקוט שמעוני - בראשית,חק לישראל - בראשית,חק לישראל - בראשית  (ט)"; // Replace with your list of book names
          
          	// Split the comma-separated string into a lookup of book names
          	ILookup<string, string> bookNamesFilter = searchBookList.Split(',')
          		.ToLookup(bookName => bookName);
          
          	// Assuming filePaths is a list of file paths
                  List<string> filePaths = new List<string>
                  {
                      "בראשית - עם ניקוד",
          "בראשית - עם טעמים",
          "בראשית - ללא ניקוד",
          "בראשית - רש''י",
          "בראשית - רש''י (ב)",
          "בראשית - שפתי חכמים",
          "בראשית - רמב''ן",
          "בראשית - תרגום יונתן",
          "בראשית - אור החיים",
          "בראשית - אבן עזרא",
          "בראשית - בעל הטורים",
          "בראשית - תרגום אונקלוס",
          "בראשית - ספורנו",
          "בראשית - כלי יקר",
          "בראשית - דעת זקנים",
          "מדרש רבה - חומש בראשית",
          "מדרש תנחומא - בראשית",
          "ילקוט שמעוני - בראשית",
          "חק לישראל - בראשית",
          "חק לישראל - בראשית  (ט)",
          "שמות  -עם ניקוד",
          "שמות  -עם טעמים",
          "שמות  - ללא ניקוד",
          "שמות - רש''י",
          "שמות - רש''י (ב)",
          "שמות - שפתי חכמים",
          "שמות - רמב''ן",
          "שמות - תרגום יונתן",
          "שמות - אור החיים",
          "שמות - אבן עזרא",
          "שמות - בעל הטורים",
          "שמות - תרגום אונקלוס",
          "שמות - ספורנו",
          "שמות - כלי יקר",
          "שמות - דעת זקנים",
          "מדרש רבה - חומש שמות",
          "מדרש תנחומא - שמות",
          "ילקוט שמעוני - שמות",
          "חק לישראל - שמות",
          "חק לישראל - שמות  (ט)",
          
                      // Add more file paths as needed
                  };
          
          	foreach (string filePath in filePaths)
                  {
          		bool containsBook = bookNamesFilter
          			.Any(group => group.Any(bookName => filePath.Contains(group.Key)));
          
          		if (containsBook)
          		{
          			Console.WriteLine($"File '{filePath}' contains at least one of the book names.");
          		}
          	}
          }
          

          גמ"ח מידע מחשבים ואופיס

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

            מה פתאום להביא את כל הקוד?? גם ככה הבאת מידי... גם שינית את הקוד משני המקרים וגם יש שמה הרבה הבלים של נסיונות, חבל, למה לא לכתוב פה מה צריך.
            אתה לא יכול לומר "יש לי טקסט A ואני רוצה לבדוק אם הוא אחד מהאלמנטים שמופיעים בB עם פסיק ביניהם"?
            לפי מה שהבנתי ממך, אתה צריך לכתוב קוד כזה:

             bool exsist = Properties.Settings.Default.searchBookList.Split(',').Any(x => x == filepath);
            

            Lookup עושה משהו אחר מlist (הוא מקבץ פריטים לפי ערכם או לפי פרמטר נבחר) והוא לא יותר מהר ממנה, ושניהם מיותרים לצורך שלך.

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

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

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

            pcinfogmachP תגובה 1 תגובה אחרונה
            1
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי dovid
              #8

              רק כעת אני מבין מהקוד מהlinqpad מה אתה מתכוון יותר מהיר, כי אתה בודק על פני הרבה ערכים ולא רק אחד.
              מה שיותר מהיר זה אכן Dictionarry אבל במקרה שלך שזה רק מפתחות ללא ערכים אז משתמשים בhashSet.
              ניכר שאתה משתמש הרבה עם בינה מלאכותית..

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

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

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

                הנה קוד עם HashSet:

                static void Main(string[] args)
                {
                    string searchBookList = "בראשית - עם ניקוד,בראשית - עם טעמים,בראשית - ללא ניקוד,בראשית - רש''י,בראשית - רש''י (ב),בראשית - שפתי חכמים,בראשית - רמב''ן,בראשית - תרגום יונתן,בראשית - אור החיים,בראשית - אבן עזרא,בראשית - בעל הטורים,בראשית - תרגום אונקלוס,בראשית - ספורנו,בראשית - כלי יקר,בראשית - דעת זקנים,מדרש רבה - חומש בראשית,מדרש תנחומא - בראשית,ילקוט שמעוני - בראשית,חק לישראל - בראשית,חק לישראל - בראשית  (ט)"; // Replace with your list of book names
                    var bookNamesFilter =  searchBookList?.Split(',').ToHashSet();
                
                    var filePaths = new List<string>
                        {
                            "בראשית - עם ניקוד",
                "בראשית - עם טעמים",
                "בראשית - ללא ניקוד",
                "בראשית - רש''י",
                "בראשית - רש''י (ב)",
                "בראשית - שפתי חכמים"
                        };
                
                    if(bookNamesFilter != null)
                        foreach (string filePath in filePaths)
                        {
                            if (bookNamesFilter.Contains(filePath))
                                Console.WriteLine($"File '{filePath}' contains at least one of the book names.");
                        }
                }
                

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

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

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

                  @dovid כתב בבקשת עזרה עם קוד בc#:

                  if (searchBookList.Contains(filePath))

                  לא הבנתי שורה זו כי כאן חזרת לstring המקורי לכאורה אז היכן אני משתמש בhashset

                  גמ"ח מידע מחשבים ואופיס

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

                    צודק, טעיתי, תחליף את המילה searchBookList בbookNamesFilter.

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

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

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

                      גם שני שורות מעל יש להחליף כנ"ל.

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

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

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

                        @dovid כתב בבקשת עזרה עם קוד בc#:

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

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

                        אגב שאלה האם פיצול קוד ארוך להרבה חלקים עלול להאט את הקוד (כי למעשה עכשיו יש קצת יותר שורות בקוד מאם אילו הכל היה בתוך קוד אחד)

                        גמ"ח מידע מחשבים ואופיס

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

                          עלות הזמן לא נמדדת בשורות.
                          לקריאה לפונקציה יש עלות מקרוסקופית תיאורטית, תשאיר את זה למדעני טילים.
                          בתכלס מי שמשתמש עם פונקציות הקוד שלו מהיר יותר כי כפועל יוצא הוא פשוט כותב קוד טוב יותר 🙂

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

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

                          תגובה 1 תגובה אחרונה
                          6

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

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

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