פונקצית Replace

‏ • 30 ביוני, 2004

פונקצית Replace מאפשרת להחליף תת-מחרוזת בתוך מחרוזת שלמה בערך אחר.
לפונקציה קיימים שישה ארגומנטים (אופציות) כאשר שלושה מהם אופציונאליים.

מבנה הפונקציה נראה כך:






1  



Replace(str,find,replacewith,start,count,compare)



הארגומנט "str":
חובה למילוי. Str הוא שם המשתנה/הערך שבו ההחלפה תתבצע.במידה ושמים ערך במקום ה-str, הוא חייב לבוא בגרשיים משני הצדדים, לדוגמא:






1  



Replace("this is a string",find,replacewith,start,count,compare)



הארגומנט "find":
חובה למילוי. Find הוא הערך שאתם מעוניינים לחפש במחרוזת שלכם ולבצע החלפה באותו הערך. Find יבוא בדרך כלל בתוך גרשיים ולא כמשתנה אך שתי האופציות אפשריות. לדוגמא:






1  



Replace(str,"PC",replacewith,start,count,compare)



הארגומנט "replacewith":
חובה למילוי. Replacewith הינו המשתנה/הערך שיוחלף בארגומנט find בפונקציה.Replacewith יבוא בתוך גרשיים (במידה והינו ערך ולא משתנה). לדוגמא:






1  



Replace(str,find,"Personal Computer",start,count,compare)



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






1  



Replace(str,find,replacewith,5,count,compare)



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






1  



Replace(str,find,replacewith,start,3,compare)



הארגומנט "compare":
אופציונאלי. ערך מספרי המציין איזו סוג השוואה תתבצע. במידה וארגומנט אינו מוגדר, ערכו יהיה 0 כאשר זה מסמל השוואה בינארית.























סוג השוואהערךתאורדוגמא
בינארית0השוואה רגישה. קיים הבדל בין אותיות גדולות לקטנות."Text" אינו שווה ל-"text".
טקסטית1השוואה שאינה רגישה. ההיפך מהשוואה בינארית."Text" שווה ל-"text".
מבוססת DB2השוואה המבוססת על מידע בתוך מסד הנתונים. 


דוגמא לשימוש עם הארגומנט compare:






1  



Replace(str,find,replacewith,start,count,1)


לאחר שהבנו את השימוש בפונקציה והארגומנטים הכלולים בה, הנה דוגמא פשוטה לשימוש:






1
2
3  




Dim str
Str = "Mike, Sue, Dvir, Bob"
Str = Replace(str,", ","<Br>")


המשתנה str מכיל ארבעה שמות המופרדים ע"י פסיקים. הפונקציה תחליף את הפסיקים בתגית <br> אשר בעצם תבצע הפרדה בין השמות באמצעות שורה חדשה. הפלט בדוגמא יהיה:






1
2
3
4  




Mike
Sue
Dvir
Bob


כעת, ננסה דוגמא קצת יותר מורכבת הכוללת את כל הארגומנטים שבפונקציה:






1
2
3  




Dim str
Str = "Mike, Sue, Dvir, Bob"
Str = Replace(str,", ","<Br>",7,1,1)


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






1
2  




Sue
Dvir, Bob


השם Mike נעלם כיוון שהגדרנו בארגומנט start להתחיל את ביצוע ההחלפה רק מהתו השביעי בפונקציה (החל מהשם Sue) ולהתעלם מהכתוב לפניו.
כפי שהגדרנו, התבצעה החלפה אחת בלבד ולכן השמות Dvir ו-Bob נשארו בשורה אחת ומופרדים בפסיק בודד.


השימושים העיקריים הנעשים בעזרת הפונקציה:

שימוש ראשון הוא ביצוע החלפת תווים המסוגלים לגרום 'נזק' לאפליקציות שלנו, בין אם זה בכוונה תחילה או לא. תווים כגון גרש יחיד (') וגרשיים (") יכולים לגרום להפרעת ביצועי השאילתות שלנו. בנוסף, התגים של קטן מ וגדול מ (<>) עשויים לגרום להפרעה בעת הצגת הנתונים שלנו בעמוד. במידה ולא נחסום אופציה זו, יהיה ניתן לבצע עיצוב טקסט או לגרום לנזק ויז'ואלי בטפסים או כפלט בעמוד.
נשתמש בפונקצית ה-Replace עבור חסימת אפשרויות גרימת הנזקים האפשריים בערכי קוד האסקי של התגים במקום בערכם המקורי (HTML).


החלפות נפוצות:

















































שםערך ויז'ואליערך ב-VBSקוד אסקיHTMLסיבה להחלפההפתרון
קטן מ<Chr(60)&#60;&lt;מניעת נזק ויז'ואלי בעת הצגת הנתונים בעמוד ובתוך שדות טפסים.נשנה את ערכו של התו לערכו ב-HTML:
Replace(str,"<","&lt;")
גדול מ>Chr(62)&#62;&gt;נשנה את ערכו של התו לערכו ב-HTML:
Replace(str,">","&gt;")
גרש'Chr(39)&#39;&acute;התווים גורמים לשגיאה בעת ביצוע שאילתות ועלולים למנוע את הצגת הטקסט בשדות טפסים באופן מלא.לפני ההכנסה למסד הנתונים, נשנה את ערכו של התו לערכו ב-HTML:
Replace(str,"'","&acute;")
גרשיים"Chr(34)&#34;&quot;לפני ההכנסה למסד הנתונים, נשנה את ערכו של התו לערכו ב-HTML:
Replace(str,"""","&quot;")
אנטר (Enter)שורה חדשהChr(13)לא קיים<br>שמירה על הצגת הטקסט כפי שנכתב בשדה textarea (as is) ולשמור על מעברי שורה.נשנה את ערכו של התו לערכו ב-HTML:
Replace(str,chr(13),"<br>")


פונקציה המבצעת את כל השינויים המצויים בטבלה עבור כל מחרוזת:






1
2
3
4
5
6
7
8
9  




Function strFormat(str)
    If IsEmpty(str) or IsNull(str) Then Exit Function
    Str = Replace(str,"<","&lt;")
    Str = Replace(str,">","&gt;")
    Str = Replace(str,"'","&acute;")
    Str = Replace(str,"""","&quot;")
    Str = Replace(str,chr(13),"<br>")
    strFormat = str
End Function


דוגמא לשימוש בפונקציה:






1
2  




Str = "This Is a <b>bold</b> text"
Str = strFunction(str)


הפלט בדוגמא יהיה:






1  



This Is a &lt;b&gt;bold&lt;/b&gt; text


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

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

ולסיום, טבלה המציגה את ערכי ההחזרה בפונקציה Replace:
























אםערך ההחזרה
מחרוזת ריקה (אפס תווים)מחרוזת ריקה ("")
המחרוזת אפסית (Null)שגיאה
Find ריק (אפס תווים)מחרוזת ללא שינוי
Find אפסי (Null)שגיאה
מחרוזת ריקה ("")Start > Lenמחרוזת))
Count = 0מחרוזת ללא שינוי


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

בהצלחה!

תגיות: , , , ,

BuildHome

מפתח אתרים ואפליקציות ווב מנוסה

תגובות בפייסבוק