הוצאת תווי – ממחרוזת

פורומים אפיון ופיתוח פריוריטי הוצאת תווי – ממחרוזת

  • Post
    namnami
    משתתף
    כיצד ניתן להוציא מחרוזת ללא תווי – ממחרוזת קיימת?

    לדג' במקום 08-915-1009 לשלוף 089151009.

    תודה

מוצגות 14 תגובות – 1 עד 14 (מתוך 14 סה״כ)
  • Replies
    namnami
    משתתף
    <p dir="ltr">אם יש דרך יותר פשוטה מאשר:
    SELECT STRCAT(STRPIECE('08-915-1009','-', 1, 1),
    STRPIECE('08-915-1009','-', 2, 1),
    STRPIECE('08-915-1009','-', 3, 1),
    STRPIECE('08-915-1009','-', 4, 1))</p>
    • התגובה הזו עודכנה לפני לפני 2 שנים, 11 חודשים ע"י namnami.
    yitzchok
    משתתף
    IL
    הלוואי שהיתה פונקציה להחלפת תווים בתוך ביטוי בשאילתא.

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

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

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    namnami
    משתתף
    איך הכוונה לעבור תו תו?
    yitzchok
    משתתף
    IL
    מתחילים עם המחרוזת במשתנה ועוד משתנה ריק.

    מחזיקים משתנה עם המיקום במקור.

    לוקחים את התו ה-x בעזרת STRIND או SUBSTR (לשני יש יתרון שלוקח פרמטר משתנה, לראשון שמתנהג יותר טוב עם רווחים עד כמה שאני זוכר). פתרון ל-STRIND – כל פעם לקרוא את התו הראשון ואז לשים במשתנה המקור את הערך ההוא מתו 2 עד הסוף, כך שבפעם הבאה התו הבא הוא התו הראשון…

    ואז בודקים את התו שלקחו ומחליטים האם לשרשר אותו למחרוזת הפלט או לא.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    srotem
    משתתף
    יש גם פטנט כזה
    <p style="direction: ltr;">EXECUTE FILTER '34', '34','32', :I, :O;</p>
    החלפת תווים (קודי ASCII) לדוגמה החלפת קוד 34 ב 32, מופיע ב SDK
    yitzchok
    משתתף
    IL
    קודם כל להפעלת תוכנה (EXECUTE) יש בטח מחיר ניכר בביצועים.

    יותר מזה, כך המסמך מתאר את תוכנת פילטר:
    The FILTER program performs various manipulations on the contents of a
    specified text file.
    אפשר להשתמש בתוכנה זו לפלטר טקטס במשתנה לתוך משתנה אחר? לא בטוח.

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

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

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    namnami
    משתתף
    השימוש ב FILTER להחלפת תווים יכול להיות שימושי כאשר טוענים קובץ חיצוני ורוצים לשנותו לפני הכנסת הנתונים למערכת.

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

    (לדג' 2 5 2 J C B ױײװ . ׀. )

    namnami
    משתתף
    בדקתי שוב ואין שיבוש בעברית כשעושים פילטר על קובץ טקסט. העברית משתבשת כאשר עושים פילטר על קובץ CSV.

    איך ניתן להפוך CSV לטקסט בקוד?

    תודה

    yitzchok
    משתתף
    IL
    קודם כל נראה לי שעברנו לנושא אחר

    מצד אחד הייתי אומר שיש סיכוי ש filter ישבש את סדר השורה

    מצד שני אני חושש שהבעיה כאן לא קשור להיותו של הקובץ בצורת csv אלא שהוא אולי לא בקידוד הצפוי (utf8 לעומת utf16 או כלל לא יוניקוד)

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    namnami
    משתתף
    EXECUTE FILTER '-','-', ", :UTF8TXTFILE , :FILTERED

    1) הפילטר להחלפת תווים עובד כאשר הקלט הוא קובץ בפורמט UTF8. אבל באיזה פורמט קובץ הפלט שלו? איך ניתן להתאים אותו לאחר החלפת התווים לטעינה לטבלה?

    בניסיון לטעון את קובץ הפלט שלו ב DBLOAD לא מתקבלות תוצאות רצויות.

    ניסיתי ליצור קובץ חדש מקובץ הפלט ע"י -utf82unicode כדי להתאים את הפורמט אבל ב DBLOAD עדיין לא מתקבלות תוצאות רצויות.

    2) הפילטר החליף תווי '-' בתו רווח ריק. אבל האם ניתן למחוק לגמרי תו זה כך שלא ישאר אפילו רווח במקום תו זה?

    תודה

     

    srotem
    משתתף
    1. לגבי הקובץ הוא מעתיק מהקובץ המקורי, ההעתק הוא אותו פורמט

    2. לגבי התו הריק ,  ’32’, ’34’,’34’,  כאן, אתה מחליף את הקוד גירשיים (34) לקוד רווח (32), אם את רוצה ל NULL תבחר קוד "0" תסתכל בקודי ASCII

    אני משתמש בקובץ TAB, בקובץ CSV יש בעיה אם אתה מקבל מספר "1,234" יש בעיה עם ה ","

    לגבי העברית אתה חייב UNICODE בטעינה לפריוריוטי

    yitzchok
    משתתף
    IL
    פריוריטי לא חזקה בדברים כאלה.

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

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    namnami
    משתתף
    ראיתי שאכן הפילטר שומר על צורת הקובץ (utf8) ונטען כראוי ל DBLOAD (לאחר הפיכתו ב utf82unicode), זאת כל עוד החלפת התווים בפילטור היא לתו אחר רגיל. אבל כשמחליפים ל '0' (NULL) זה יוצר איזה שיבוש שלכן לא נטען ב DBLOAD, נראה שזה מפצל את השדה במקום להוריד את התו.

    ניסיתי להחליף ל 'backspace  '8 אבל התוצאה היא כמו החלפה ל 'space '32 , כך שאמנם לא משתבש אבל מחליף את התו לרווח ולא מוריד את התו לגמרי.

    אולי יש רעיון איך להוריד את התו בפילטר? חוץ מזה עובד מצוין.

    תודה

    yitzchok
    משתתף
    IL
    for the record  כי השתתפתי בדיון כאן בזמנו

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

    לעומת זאת כאשר משתמשים בתוכנית ב-mode של replace- אז הפרמטרים הם לא ערכים של תווים אלא מחרוזות. הפקודה הבאה, לדוגמה יכולה להוריד פסיקים מהקובץ (כמובן שברתי שורות ודילגתי פסיקים)

    EXECUTE
    FILTER
    'replace-'
    ','
    "
    infile:
    outfile:
    ;

    השתמשתי בו לנקות קובץ שיהיה קובץ CSV
    אני מפיק קובץ מופרד טאבים בעזרת ממשק מסכי, מוריד כל פסיק ככה (אז אני יודע שאין פסיקים שיתפרשו כמפרידי עמודות) ואז עושה עוד FILTER להמיר את הטאבים לפסיקים.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
מוצגות 14 תגובות – 1 עד 14 (מתוך 14 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.