Reverse למחרוזת

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

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

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

    תודה,
    רועי.

מוצגות 7 תגובות – 1 עד 7 (מתוך 7 סה״כ)
  • Replies
    yoram
    משתתף
    פריוריטי לא מכיר את הפונקציה שציינת אבל ניתן לקבל את התוצאה הרצויה בשימוש במספר פונקציות מה – SDK בשילוב עם לולאה ו – STRLEN .
    רועי זלוף
    משתתף
    אפשר עזרה עם אלגוריתם שכזה?
    yitzchok
    משתתף
    IL
    הפונקצייה לא חייבת להקרא 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.

    yitzchok
    משתתף
    IL
    הקוד לא כ"כ קריא. בפורום חשוב לשים קוד בתגיות של קוד שקובע כיוון שמאל לימין וכו'. יש אייקון עם "קטן מ-" ו-"גדול מ-" – זה הכפתור לתגיות אלה.
      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    רועי זלוף
    משתתף
    :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 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.