הסברים הדרכתיים

איך להפריד שם פרטי ושם משפחה?

By נובמבר 1, 2017 2 Comments

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

איך להפריד שם פרטי משם מלא באקסל

עבור עמודת השם הפרטי – נשתמש ב2 פונקציות –

  1. Left – מחזירה את התווים משמאל לימין ולפי מספר התווים המבוקש.
  2. Find – מחזירה את המספר שבו נמצא התו המבוקש בתוך תא מסוים.

אם כן, נראה די פשוט סך הכל – נשתמש בפונקציה בתוך פונקציה בצורה הבאה –

שם מלא
שם פרטי - נוסחה
שם פרטי - תוצאה
Analysis Paralysis
LEFT(A2,FIND(" ",A2)-1)
Analysis
אנאליסיס פאראליסיס
LEFT(A3,FIND(" ",A3)-1)
אנאליסיס
שימו לב שהחסרתי 1 מהתוצאה של פונקציית ה-find וזה בגלל שהפונקציה מחזירה את המיקום של הרווח, ולא אחד לפני, אם לא הייתי עושה את זה – היינו צריכים לצמצם רווחים עודפים.

איך להפריד שם משפחה משם מלא באקסל

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

  1. Right – כמו פונקציית left, רק מחזירה מימין
  2. Len – מחזירה את האורך של כל הפריטים בתא (מתייחסת להכל כאל מחרוזת)
  3. Find – אותה הפונקציה ממקודם.
שם מלא
שם פרטי - נוסחה
שם פרטי - תוצאה
Analysis Paralysis
RIGHT(A7,LEN(A7)-FIND(" ",A7))Paralysis
אנאליסיס פאראליסיס
RIGHT(A8,LEN(A8)-FIND(" ",A8))פאראליסיס

למה כדאי לשים לב?

  1. מה שמהווה את הציר שלנו בנוגע לחלוקה הוא מה שנכניס בתוך פונקציית ה-Find – כשאני רוצה להפריד לפי רווח, אני מזין רווח, אם הייתי רוצה להפריד בין Source ו-Medium – אני אוכל לעשות הפרדה לפי " / ", ואם נרצה להפריד בין שם משתמש לשרת הדואר שלו – פשוט נחליף את הרווח ב"@".
  2. זה עובד אותו הדבר עבור עברית ואנגלית, ככה שאין צורך של ממש 'לעוות' את הנוסחה בשביל העברית.

סיבוכים אפשריים

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

נניח השם המלא הוא "בת אל כהן" – אם היה לנו מזל, היא הייתה כותבת את השם שלה עם מקף בין המילים 'בת' ו'אל', אבל אין לנו מזל, מה לעשות.

נייצר נוסחה שעושה את אותה הפונקציה ממקודם, רק שתתחיל לחפש מהרווח השני. הנוסחה תראה כך:

שם מלא
שם פרטי
שם משפחה
בת אל כהן
LEFT(A16,FIND(" ",A16,FIND(" ",A16)+1)-1)
RIGHT(A16,LEN(A16)-LEN(B16))
בת אל כהן
בת אל
כהן

למה כדאי לשים לב?

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

 

באילו עוד מצבים תרצו להשתמש בשיטה הזאת?

יש לכם שיטה אחרת שעובדת יותר טוב?

ספרו לי בתגובות!

2 Comments

  • קובי הגיב:

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

    • analysis-paralysis הגיב:

      היי קובי!

      תודה על התגובה 🙂

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

      בוא נחליט, לצורך השאלה שלנו, שהתוצר שאנחנו נוכל להוציא יעבור למערכת אוטומטית למשלוח SMS, ואנחנו נרצה לפנות רק בשם הפרטי, מה נראה לך שהיית עושה?

Leave a Reply