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

    פתרון לבאג של הקראת "ביוני" בקריין החדש

    עזרה הדדית למשתמשים מתקדמים
    3
    15
    82
    טוען פוסטים נוספים
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
    תגובה
    • הגיבו כנושא
    התחברו בכדי לפרסם תגובה
    נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
    • ז
      זאביק נערך לאחרונה על ידי

      תגובה: קול ההקראה השתנה לפתע

      @זאביק כתב בקול ההקראה השתנה לפתע:

      אסביר בצורה מפורטת יותר, איזו תקלה עומדת להיות בעקבות הקריין החדש בחודש הבא:
      יש לי קובץ בדטה בייס, עם תאריכים לועזיים בצורה של ספרות בלבד,
      ויש לי קוד ששואב את הנתונים דרך API ומקריא את התאריכים ללקוחות שלי במערכת הטלפונית,

      1a703cdd-c5ce-4306-bf2c-6987cb603ddd-תמונה.png

      וכעת שמתי לב, שאת התאריך 14 ביוני 2025 למשל, הוא מקריא לי בטלפון כך (שימו לב לניקוד):
      14 בִּיוֵנֵי 2025
      וכעת הלקוחות שלי שומעים בטלפון "בִּיוֵנֵי" , ולא מבינים מה הקריין בדיוק אומר,

      @אביי-ורבא כתב בקול ההקראה השתנה לפתע:

      רג'קס להחלפה של כל המופעים של המילה "יוני"/"ביוני" בסטרינג שאתה מחזיר לימות למילה המנוקדת כראוי,
      סתם ככה כדאי לך להעביר בפונקציה מסויימת כל סטרינג שאתה שולח לימות בחזרה, ובפונקציה הזו תוכל להטמיע כל מיני החלפות והסרת תווים לא רצויים, רווחים מיותרים וכדו'

      @אביי-ורבא כתב בקול ההקראה השתנה לפתע:

      אולי כדאי שתפתח נושא חדש עם בלוק הקוד הרלוונטי, ואשתדל לעזור לך,

      @אביי-ורבא חודש טוב,

      אשמח אם תוכל בבקשה להדריך אותי, איזה שורות בדיוק (כלומר: איזה פקודות בדיוק) עלי להוסיף בקוד שלי, בכדי שיחליף אוטומטי מ"ביוני" ל"בְּיוּנִי", (את שאר החודשים כמדומני שהוא מקריין נכון),

      להלן ציטוט מהקוד שלי לגבי העניין הרלוונטי:

              //date to string
              const date = new Date(result.evictionDate);
              const optionsDate = { year: 'numeric', month: 'long', day: 'numeric' };
      
      *********
      
                { type: "text", data: "בתאריך" },
                { type: "text", data: date.toLocaleDateString("iw-IL", optionsDate) },
      
      
      
      
      

      יתכן שהקוד אצלי נבנה מלכתחילה עם פונקציית TEXT ולא עם פונקציית DATE בגלל שהתאריך מופיע אצלי בדטה בייס בתבנית 2025/06/14 ואילו בפונקציית DATE צריך לשלוח לימות בתבנית 14/06/2025

      ואם אכן זו הסיבה לכך, אז היה אפשר להכניס פקודה להפוך ולסדר את התבנית של התאריך לפני השליחה לימות, - ואז הקריינות של הDATE, הייתה קריינות נורמלית בלי צורך לתיקונים נוספים,

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

      תודה רבה!!!

      מ. מ. פליישער א 2 תגובות תגובה אחרונה תגובה ציטוט 0
      • מ. מ. פליישער
        מ. מ. פליישער ניהול @זאביק נערך לאחרונה על ידי

        @זאביק
        סליחה שאני מתערב אבל למה לא להשתמש בפונקצייה של תאריך מובנה בAPI בשביל זה?
        ca100438-19a2-4ab2-8539-f7509bdb83aa-image.png

        3c147889-02a9-497a-8586-b58b2d22cf5a-image.png

        אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
        אתר: אהבת.ישראל | מייל: cs@ivrtop.com

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

          @מ-מ-פליישער תסתכל בספוילר שכתבתי שם,
          תודה רבה!!

          מ. מ. פליישער תגובה 1 תגובה אחרונה תגובה ציטוט 0
          • מ. מ. פליישער
            מ. מ. פליישער ניהול @זאביק נערך לאחרונה על ידי

            @זאביק כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

            @מ-מ-פליישער תסתכל בספוילר שכתבתי שם,
            תודה רבה!!

            זה JS? אם ככה פיתרון הכי פשוט:

            let date  = "2025/06/14";
            let yemotDate = date.split("/").reverse();
            

            התוצאה שהוא פשוט מפריד עם הלוכסן ועושה רוורס 🙂

            אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
            אתר: אהבת.ישראל | מייל: cs@ivrtop.com

            ז תגובה 1 תגובה אחרונה תגובה ציטוט 3
            • ז
              זאביק @מ. מ. פליישער נערך לאחרונה על ידי

              @מ-מ-פליישער יש לי את כל סוגי התאריכים, ולאו דווקא 14 ביוני

              מ. מ. פליישער תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • מ. מ. פליישער
                מ. מ. פליישער ניהול @זאביק נערך לאחרונה על ידי

                @זאביק כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                @מ-מ-פליישער יש לי את כל סוגי התאריכים, ולאו דווקא 14 ביוני

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

                let dbDate = ...
                

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

                מקווה שהובנתי.

                אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
                אתר: אהבת.ישראל | מייל: cs@ivrtop.com

                מ. מ. פליישער תגובה 1 תגובה אחרונה תגובה ציטוט 2
                • מ. מ. פליישער
                  מ. מ. פליישער ניהול @מ. מ. פליישער נערך לאחרונה על ידי

                  @מ-מ-פליישער כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                  @זאביק כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                  @מ-מ-פליישער יש לי את כל סוגי התאריכים, ולאו דווקא 14 ביוני

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

                  let dbDate = ...
                  

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

                  מקווה שהובנתי.

                  נגיד
                  let date = "2025/05/27";
                  let date1 = "2125/05/27";
                  date.split("/").reverse()
                  ואותו דבר גם על השני. בקיצור מה שהבאתי תעשה עליו טסט

                  אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
                  אתר: אהבת.ישראל | מייל: cs@ivrtop.com

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

                    @מ-מ-פליישער

                    למעשה הקוד שלי כעת נראה כך (כלומר הקטע הרלוונטי מתוך קוד ארוך מאוד):

                            //date to string
                            const date = new Date(result.evictionDate);
                            const optionsDate = { year: 'numeric', month: 'long', day: 'numeric' };
                    
                    
                    
                              { type: "text", data: "בתאריך" },
                              { type: "text", data: date.toLocaleDateString("iw-IL", optionsDate) },
                    
                    
                    
                    
                    
                    

                    ואודה לך מאוד, אם תוכל להראות לי כיצד להכניס לתוך הקוד בצורה מדוייקת את הקוד של הרוורס, ומה עוד צריך לשנות בקוד המקורי (חוץ מהשינוי של TEXT ל DATE) בשביל שיהיה תקין עם הקוד של הרוורס,

                    תודה רבה!!!

                    א תגובה 1 תגובה אחרונה תגובה ציטוט 0
                    • א
                      אביי ורבא @זאביק נערך לאחרונה על ידי

                      @זאביק כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                      date.toLocaleDateString("iw-IL", optionsDate)

                      קודם כל אולי כדאי לאמת שהסטרינג אכן מכיל את המילה "ביוני" 😃
                      תוסיף קונסול לוג לערך של date.toLocaleDateString("iw-IL", optionsDate)

                      למעשה, אני מצרף קוד מלא עבור nodejs שכתבתי לאחת האפליקציות שלי, ככה זה יעבוד לך לא רק על "ביוני", אלא על רשימה שתוכל לעדכן בקלות,

                      בהפעלה של האפליקציה נטענת רשימת מילים מקובץ dictionary.csv שנראה ככה:

                      תּוֹדָה,תודה
                      אַחֵר,אחר
                      יַעֲקֹב לַנְדֳּא,יעקב לנדא
                      

                      (המבנה פשוט - הערך החדש, הערך הקיים שאנחנו רוצים להחליף)

                      כעת צריך ליצור קובץ dictionary.js שהוא בעצם מכיל את כל הקוד הדרוש, פונקציה לטעינה של הערכים מהcsv, פונקציה לרענון מחדש של הרשימה, ופונקציית replaceTextDictionary שמבצעת את ההחלפה עצמה,

                      import { readFileSync } from 'fs';
                      import { join } from 'path';
                      import { fileURLToPath } from 'url';
                      import { dirname } from 'path';
                      
                      // Get the directory name of the current module
                      const __filename = fileURLToPath(import.meta.url);
                      const __dirname = dirname(__filename);
                      
                      // Map to store the dictionary data
                      let dictionaryMap = new Map();
                      
                      /**
                       * Loads dictionary data from CSV file into a map
                       * @returns {Map} The dictionary map
                       */
                      function loadDictionary() {
                          try {
                              // Read the CSV file
                              const csvPath = join(__dirname, 'dictionary.csv');
                              const csvData = readFileSync(csvPath, 'utf8');
                              
                              // Split the CSV data into rows
                              const rows = csvData.split('\n');
                              
                              // Process each row
                              rows.forEach(row => {
                                  if (!row.trim()) return; // Skip empty rows
                                  
                                  // Split the row into columns
                                  const columns = row.split(',');
                                  
                                  if (columns.length < 2) return; // Skip rows with insufficient data
                                  
                                  // The first column is the value
                                  const value = columns[0].trim();
                                  
                                  // The remaining columns are keys
                                  for (let i = 1; i < columns.length; i++) {
                                      const key = columns[i].trim();
                                      if (key) {
                                          dictionaryMap.set(key, value);
                                      }
                                  }
                              });
                              
                              return dictionaryMap;
                          } catch (error) {
                              console.error('Error loading dictionary:', error);
                              return new Map();
                          }
                      }
                      
                      /**
                       * Replaces text based on the dictionary map
                       * @param {string} text - The text to process
                       * @returns {string} - The processed text with replacements
                       */
                      function replaceTextDictionary(text) {
                          if (!text) return text;
                          
                          // Ensure the dictionary is loaded
                          if (dictionaryMap.size === 0) {
                              loadDictionary();
                          }
                          
                          // Sort keys by length in descending order to handle longer matches first
                          // This is crucial for cases where one key is a substring of another
                          // For example, "לאלתר ספרים" should be checked before "אלתר"
                          const sortedKeys = Array.from(dictionaryMap.keys()).sort((a, b) => b.length - a.length);
                          
                          let result = text;
                          
                          // Process each key in the dictionary
                          for (const key of sortedKeys) {
                              // For Hebrew text, we need a different approach than word boundaries
                              // We'll use a regex that matches the key surrounded by word boundaries or space/punctuation
                              const pattern = `(^|\\s|[\\p{P}])(${escapeRegExp(key)})($|\\s|[\\p{P}])`;
                              const regex = new RegExp(pattern, 'gu');
                              
                              // Replace while preserving the surrounding characters
                              result = result.replace(regex, (match, before, word, after) => {
                                  return `${before}${dictionaryMap.get(key)}${after}`;
                              });
                          }
                          
                          return result;
                      }
                      
                      /**
                       * Escapes special characters in a string for use in a regular expression
                       * @param {string} string - The string to escape
                       * @returns {string} - The escaped string
                       */
                      function escapeRegExp(string) {
                          return string.replace(/[.*+?^${}()|[]\]/g, '\\$&');
                      }
                      
                      // Load the dictionary when the module is imported
                      loadDictionary();
                      
                      // Export functions
                      export { loadDictionary, replaceTextDictionary };
                      export const getDictionaryMap = () => dictionaryMap;
                      

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

                      import { replaceTextDictionary } from './dictionary.js';
                      
                      //date to string
                      const date = new Date(result.evictionDate);
                      const optionsDate = { year: 'numeric', month: 'long', day: 'numeric' };
                      
                      { type: "text", data: "בתאריך" },
                      { type: "text", data: replaceTextDictionary(date.toLocaleDateString("iw-IL", optionsDate)) },
                      

                      ואגב, לגוף ההצעה של @מ-מ-פליישער אתה יכול לקבל את התאריך בפורמט של dd/MM/YYYY ישירות באמצעות שינוי של הoptionsDate

                      const optionsDate = { 
                          year: 'numeric', 
                          month: '2-digit', 
                          day: '2-digit' 
                      };
                      

                      תגובה 1 תגובה אחרונה תגובה ציטוט 1
                      • א
                        אביי ורבא @זאביק נערך לאחרונה על ידי

                        @זאביק כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                        @מ-מ-פליישער

                        למעשה הקוד שלי כעת נראה כך (כלומר הקטע הרלוונטי מתוך קוד ארוך מאוד):

                                //date to string
                                const date = new Date(result.evictionDate);
                                const optionsDate = { year: 'numeric', month: 'long', day: 'numeric' };
                        
                        
                        
                                  { type: "text", data: "בתאריך" },
                                  { type: "text", data: date.toLocaleDateString("iw-IL", optionsDate) },
                        
                        
                        
                        
                        
                        

                        ואודה לך מאוד, אם תוכל להראות לי כיצד להכניס לתוך הקוד בצורה מדוייקת את הקוד של הרוורס, ומה עוד צריך לשנות בקוד המקורי (חוץ מהשינוי של TEXT ל DATE) בשביל שיהיה תקין עם הקוד של הרוורס,

                        תודה רבה!!!

                        לא צריך את ההיפוך, מספיק לשנות את optionsDate,

                        const optionsDate = { year: 'numeric', month: '2-digit', day: '2-digit' };
                        
                        ז תגובה 1 תגובה אחרונה תגובה ציטוט 1
                        • ז
                          זאביק @אביי ורבא נערך לאחרונה על ידי

                          @אביי-ורבא

                          @אביי-ורבא כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                          לא צריך את ההיפוך, מספיק לשנות את optionsDate,

                          ניסיתי לשנות כפי שכתבת בהודעה האחרונה, ולא היה תקין, (לא בפונקציית TEXT ולא ב DATE)

                          א תגובה 1 תגובה אחרונה תגובה ציטוט 0
                          • א
                            אביי ורבא @זאביק נערך לאחרונה על ידי

                            @זאביק מה לא היה תקין?
                            תצרף הדפסה של הערך לפני ואחרי

                            ז תגובה 1 תגובה אחרונה תגובה ציטוט 1
                            • ז
                              זאביק @אביי ורבא נערך לאחרונה על ידי

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

                              א תגובה 1 תגובה אחרונה תגובה ציטוט 0
                              • א
                                אביי ורבא @זאביק נערך לאחרונה על ידי

                                @זאביק תוסיף אחרי 2 השורות הראשונות בדוגמה שהבאת

                                console.log(date)
                                console.log(optionsDate)
                                

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

                                ז תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                • ז
                                  זאביק @אביי ורבא נערך לאחרונה על ידי

                                  @אביי-ורבא כתב בפתרון לבאג של הקראת "ביוני" בקריין החדש:

                                  ותעלה לכאן את הפלט שתראה בקונסול

                                  גם את זה עדיין אינני יודע כיצד לבצע...

                                  תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • פוסט ראשון
                                    פוסט אחרון