בירור | השוואת טקסטים עם התעלמות מהניקוד - מה הפתרון
-
מי שצריך פתרון לבעיה הזו יכול לפנות אלי בפרטי
-
@es0583292679 הקוד דלקמן תרומה לעימודית בגירסה הבאה
(זה מקרו של מודול ולא מקרו רגיל, אבל דורש הפעלת המקרו).
מבדיקה ראשונית נראה שעובד טוב וזה מונע מהוורד להתייחס לתווי ניקוד בזמן ההשוואה.
יש"כ לכל העוזרים שיחיו.
עריכה: בטעות העליתי קוד טיוטה והקוד הסופי נעלם לי עקב ששמרתי את הטיוטה בטעות, אנסה ליצור את הקוד שוב. -
לכל מאן דבעי (וגם - תרומה לעימודית) @es0583292679
להלן המקרו לפני ואחרי השוואת המסמכיםSub מחיקתניקוד() ' ' לסוגרייםהפיכתניקוד Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[^0192-^0204^0209^0204]" .Replacement.Text = "{^&}" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub Sub סוגרייםלהערות() Application.Run MacroName:="מחיקתניקוד" ' חזרהלראשהמסמך Macro ' ' Selection.WholeStory Selection.MoveLeft Unit:=wdCharacter, Count:=1 Application.ScreenUpdating = False again: Selection.Find.ClearFormatting If Selection.Find.Execute(findText:="\{*\}", MatchWildcards:=True, Wrap:=wdFindStop) = True Then strt = 2: lent = Len(Selection.Text) re: For I = strt To lent If Mid(Selection.Text, I, 1) = Chr(123) Then Selection.Extend Character:=Chr(125) strt = I + 1: lent = Len(Selection.Text) GoTo re End If Next mRange = Right(Selection.Text, (Len(Selection.Text) - 1)) Selection.Delete ActiveDocument.Footnotes.Add Range:=Selection.Range, Reference:="", Text:=Left(mRange, (Len(mRange) - 1)) If Selection.Previous.Text = " " Then Selection.Delete Unit:=wdCharacter, Count:=-1 GoTo again End If Application.ScreenUpdating = True End Sub Sub החזרהפנימה() Dim Adjust As Boolean, myRange As Range Dim I As Integer, X As Integer Application.ScreenUpdating = False Adjust = Options.PasteAdjustWordSpacing: Options.PasteAdjustWordSpacing = False X = ActiveDocument.Footnotes.Count For I = 1 To X StatusBar = I & ":" & X Set myRange = ActiveDocument.Footnotes(1).Range With myRange If InStr(myRange, Chr(13)) > 0 Then _ .Find.Execute findText:=Chr(13), ReplaceWith:=Chr(9), _ Wrap:=wdFindStop, Replace:=wdReplaceAll .MoveStart Count:=-1: If .Characters(1) = Chr(2) Then .MoveStart Count:=1 .MoveStart Count:=Len(myRange) - Len(LTrim(myRange)) .MoveEnd Count:=Len(RTrim(myRange)) - Len(myRange) .Copy restoredText = Trim(myRange.Text) ' הסרת רווחים בתחילת וסוף restoredText = Replace(restoredText, " ", "") ' הסרת כל הרווחים End With With ActiveDocument.Footnotes(1).Reference .Paste: .InsertBefore "": .InsertAfter "" If .Characters.Count >= 2 Then Set DupFont1 = .Characters(2).Font.Duplicate Else ' אפשר להוסיף קוד כאן אם אין מספיק תווים Set DupFont1 = .Characters(1).Font.Duplicate ' או פשוט קח אותו End If If .Characters.Count > 0 Then Set DupFont2 = .Characters.Last.Font.Duplicate Else ' אפשר להוסיף קוד כאן אם אין תווים End If .Characters.Last.Font = DupFont1: .Characters.First.Font = DupFont2 .MoveStart Count:=1: .Font.SizeBi = 8 End With Next I Application.ScreenUpdating = True: Options.PasteAdjustWordSpacing = Adjust End Sub
הוראות:
לפני ההשוואה להפעיל את המקרו סוגרייםלהערות
אחרי המקרו להפעיל את המקרו החזרהפנימה
מגבלות: עובד רק עם טקסט בלי הערות שוליים כמובן. עובד רק על טקסט בלי סימוני {} (אפשר להתגבר על זה אם מישהו ירצה). יתכן שעובד רק על טקסט קטן. יתכן שטקסט גדול יצטרך תוכנה חזקה יותר ממקרו פשוט.
באגים: נראה שהתנוחה של הניקוד לאחר ההחלפה לא יושבת טוב אלא זזה קצת הצידה, מי שיודע למה אשמח אם יוכל לספק הסבר. -
@נוכחות
קודם כל נסביר את הבעיה.
צריך להסביר איך עובד השוואת מסמכים... השוואת מסמכים עובר תו תו ובודק אם הוא לפי הסדר וברגע שיש תו שונה במסמך החדש הוא מסמן אותו כנוסף או נמחק.
במסמכים אצלך הטקסט הוא אותו הטקסט אך עם כמה שינויים בין המסמך החדש לישן.
במסמך החדש יש לך:- ניקוד
- הערות שוליים
- הערות סיום
ובמסמך הישן יש לך:
- קישורים [שני מספרים או 3]
מה שאתה רוצה לעשות זה להעביר את הקישורים מהמסמך הישן לחדש.
וכדי לעשות את זה בהשוואת מסמכים זה מסובך מבחינה טכנית כי הוורד מתייחס לניקוד כתו נוסף, ולהערת שוליים או הערת סיום כמילה וממילא אין שום מילה תואמת אם המסמך מנוקד...
מה שצריך לעשות זה לגרום לוורד להתעלם מניקוד ומהערות למיניהם (אם זה אפשרי או לא לא בדקתי).
לעניות דעתי אתה צריך ללכת על כיון כזה:- לבדוק אם יש קוד vba שמסיר את תוי הניקוד (מבחינת קוד).
- לעבור מילה מילה במקביל מהמסמך החדש והישן ע"י שני משתנים
- מהמילה של המסמך החדש להסיר ע"י קוד את התווים של הניקוד
- אם יש ערך מהמסמך החדש שהוא הערות למיניהם שיעבור רק במסמך החדש למילה הבאה
- לעשות השוואה בין שני המשתנים וכל עוד והמשתנים תואמים להמשיך לרוץ עד ש...
- כאשר המשתנה של המסמך הישן מכיל מספרים [בתחילתו או בסופו].
- שומר רק את המספר במשתנה נפרד.
- ניגש למסמך החדש ועובר לתחילת המילה או סופה
- ושותל שם את הקישור (מספר).
להכניס את כל זה ללולאה עד שנגמר המילים במסמך ה....
ומכאן הדרך פשוטה להסביר את זה לgpt.
בהצלחה!!!!קח בחשבון את הזמן והמשאבים של המחשב במסמכים גדולים
רצוי מאד להכניס קוד שגורם לוורד לא לקפוא ולהעביר את המסמכים לפני למצב טיוטה -
יישר כח גדול!
חשבתי על עוד אופציה להשתמש בקוד הנ"ל ולשנות אותו שבמקום שיהיה כל ניקוד הערה בפני עצמה שפשוט לאחר כל מילה יהיה הערה למילה עצמה כלומר אותה המילה מנוקדת בהערה ולאחר מכן מקרו שמחליף את המילים שבהערות למילים שבפנים.
בינתיים עבדתי ידנית בהשואה אך אם בעתיד אתקל בזה שוב נצטרך לבדוק מחדש.