Reverse למחרוזת

פורומים אפיון ופיתוח פריוריטי Reverse למחרוזת

הדיון הזה מכיל 7 תגובות, ויש לו 3 משתתפים, והוא עודכן לאחרונה ע״י  רועי זלוף לפני 3 חודשים.

  • דיון
    רועי זלוף
    משתתף
    היי,
    האם קיימת פונקציה שיודעת לעשות REVERSE למחרוזת?
    שהופכת לדוגמא מחרוזת 'abc' ל-'cba'?

    ב-SQL יש פונקציה ששמה REVERSE אבל הפריוריטי אינה מכיר אותה.

    תודה,
    רועי.

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • תגובות
    yoram
    משתתף
    פריוריטי לא מכיר את הפונקציה שציינת אבל ניתן לקבל את התוצאה הרצויה בשימוש במספר פונקציות מה – SDK בשילוב עם לולאה ו – STRLEN .
    רועי זלוף
    משתתף
    אפשר עזרה עם אלגוריתם שכזה?
    יצחק לביא
    משתתף
    הפונקצייה לא חייבת להקרא reverse… כל שפה עם השמות שלה. אבל זה נכון שבשפה של פריוריטי אין פונקציה שעושה פעולה כזאת.

    אין לי קוד מוכן אבל אתאר, ואזכיר כמה מהנקודות הקשות.

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

    איפה הקושי?
    RSTRIND/STRIND לא נותנןת לך לקחת תו או תווים ממקום שנקבע ע"פ משתנה, אלא רק לפי מקום קבוע. יופי, יש את RSUBSTR/SUBSTR בגרסאות אחרונות אבל דעו לכם שאלה עושים trim. יכול להיות שכאן זה לא יפריע אבל במקום אחר נפלתי על זה.
    יכול להיות שאם יש רווח במחרוזת לא תצליח לשרשר אותו למחרוזת היעד כי פריוריטי אוהבת להוריד רווחים מקצוות של מחרוזות. אם כן אולי תצטרך לשמור מספר רווחים וכאשר תמצא אחר כן תו תכניס את הרווחים לפני.

    מקווה שזה מכוון אותך.

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

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

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

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

    /***************************REVERSE STRING*********************/
    :ST1 =The Original String;
    :ST2 = ";
    :ST3 = ";
    :TEMP = ";
    :PIECE = ";
    :STR = 0;
    :AGAIN = 12;
    LABEL 1;
    :ST2 = ";
    :PIECE = STRPIECE(:ST1,' ',:AGAIN,1);
    :AGAIN = :AGAIN – 1;
    :STR = STRLEN(:PIECE);
    LABEL 2;
    :TEMP = SUBSTR(:PIECE,:STR,1);
    SELECT STRCAT(:ST2,:TEMP) INTO :ST2 FROM DUMMY;
    :STR = :STR – 1;
    LOOP 2 WHERE :STR > 0;
    SELECT STRCAT(:ST3,' ',:ST2) INTO :ST3 FROM DUMMY;
    LOOP 1 WHERE :AGAIN > 0;
    /*************************************************************/

    בסופו של דבר המחרוזת ההפוכה נמצאת במשתנה ST3.

    יצחק לביא
    משתתף
    הקוד לא כ"כ קריא. בפורום חשוב לשים קוד בתגיות של קוד שקובע כיוון שמאל לימין וכו'. יש אייקון עם "קטן מ-" ו-"גדול מ-" – זה הכפתור לתגיות אלה.
    רועי זלוף
    משתתף
    :ST1 = :METL_DETAILS;
    :ST2 = '';
    :ST3 = '';
    :TEMP = '';
    :PIECE = '';
    :STR = 0;
    :AGAIN = 12;
    LABEL 1;
    :ST2 = '';
    :PIECE = STRPIECE(:ST1,' ',:AGAIN,1);
    :AGAIN = :AGAIN - 1;
    :STR = STRLEN(:PIECE);
    LABEL 2;
    :TEMP = SUBSTR(:PIECE,:STR,1);
    SELECT STRCAT(:ST2,:TEMP) INTO :ST2 FROM DUMMY;
    :STR = :STR - 1;
    LOOP 2 WHERE :STR > 0;
    SELECT STRCAT(:ST3,' ',:ST2) INTO :ST3 FROM DUMMY;
    LOOP 1 WHERE :AGAIN > 0;

    המחרוזת המקורית נמצאת מלכתחילה ב-משתנה ST1, והמחרוזת ההופכית נמצאת ב-ST3.

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)

יש להתחבר למערכת על מנת להגיב.