לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה חץ ימינה  

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



  #2  
ישן 29-08-2016, 18:15
צלמית המשתמש של קוביבי
  משתמש זכר קוביבי מנהל קוביבי אינו מחובר  
מנהל פורום מערכות הפעלה - הרובע המייקרוסופטי.
 
חבר מתאריך: 07.10.04
הודעות: 13,777
LinkedIn profile
בתגובה להודעה מספר 1 שנכתבה על ידי בזוקה שמתחילה ב "עדכון קובץ נתונים מקובץ חדש"

לא אמרת באיזו שפה, אז באופן כללי

1. אני לא מבין מה המפתח שלך, אם הימני - חסרה לך שורה (111.111.111.111) ואם השמאלי חסר לך 111.111.111.113
2. אם אתה מדבר על תהליך של "עדכון בסיס נתונים" אתה לא הולך מהחדש לישן אלא להיפך, כי תמיד צריכה להיות לך האופציה שיכנסו עוד נתונים חדשים ואתה לא רוצה "להשלים" נתונים מהעבר

אחרי שסגרנו את הפינה הזו, הפתרון הכי מתאים הוא שימוש ב dictionary (אם ,net) או map (אם java) שם אתה יכול ליצור "מערך" אשר המפתח שלו הוא אובייקט גנרי (מספר, מחרוזת) והערך שלו הוא אובייקט שיכיל את ה"נתון" + תאריך עדכון.
לאחר מכן העדכון יהיה משהו בסגנון (ב.net)
קוד:
if (data[key].value.updateDate <= newData.updateDate) data[key] = value;

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 29-08-2016, 19:37
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי בזוקה שמתחילה ב "עדכון קובץ נתונים מקובץ חדש"

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

אם הסדר לא משנה, הפתרון הטריוויאלי:
קוד PHP:
<?php

$files_to_merge 
= array('b1.txt''b2.txt');
$key_column_id 1# set this to the ordinal location of the key which gets updated
$out = array();

foreach(
$files_to_merge as $file) {
        
$in file_get_contents($file);
        if (!
$in) {
                echo 
"Error opening/reading $file (or file is empty). Aborting!\n";
                exit(
1);
        }
        foreach(
explode("\n"$in) as $line) {
                
$line trim($line);
                if (
strlen($line)) {
                        
$splitted explode(' '$line);
                        
$out[$splitted[$key_column_id-1]] = $line;
                }
        }
}

echo 
"Merged file:\n\n";

echo 
implode("\n"$out);

echo 
"\n";
?>

(אגב, אפשר לתת רשימה של מספר לא מוגבל של קבצים...)

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

קוד PHP:
<?php

$files_to_merge 
= array('b1.txt''b2.txt');
$key_column_id 1# set this to the ordinal location of the key which gets updated
$out = array();

$files_to_merge array_reverse($files_to_merge);

foreach(
$files_to_merge as $file) {
        
$in file_get_contents($file);
        if (!
$in) {
                echo 
"Error opening/reading $file (or file is empty). Aborting!\n";
                exit(
1);
        }
        foreach(
explode("\n"$in) as $line) {
                
$line trim($line);
                if (
strlen($line)) {
                        
$splitted explode(' '$line);
                        if (!
array_key_exists($splitted[$key_column_id-1], $out)) {
                                
$out[$splitted[$key_column_id-1]] = $line;
                        }
                }
        }
}

echo 
"Merged file:\n\n";

echo 
implode("\n"$out);

echo 
"\n";
?>


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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 30-08-2016, 05:47
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 4 שנכתבה על ידי בזוקה שמתחילה ב "כנראה שלא הייתי מספיק ברור :-("

והקוד שצרפתי למעלה לא עושה את מה שכתבת אלא משהו אחר?

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

bash זה לא לינוקס, זה shell. שקיים בהרבה מערכות הפעלה (אפילו חלונות). אם כוונתך שאתה רוצה ששפת התכנות תהיה bash - אפשר לעשות את זה גם שם, אתה יכול להשתמש באלגוריתם כדי לכתוב קוד דומה (אבל לדעתי תמיד כדאי להשתמש בכלי שמבצע משימה בצורה פשוטה יותר ואולי אפילו מהירה יותר בגלל אי הצורך לבצע fork עבור כל פעולה שבשפות אחרות מובנית ולא ידרשו context switching - בייחוד אם עובדים על קבצים גדולים)
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 30-08-2016, 20:16
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 6 שנכתבה על ידי בזוקה שמתחילה ב "אפשר לקבל הסבר?"

ושוב לא כתבת מי הכתובת שהיא המפתח שברגע שהוא חוזר - מעדכנים את הכתובת השנייה. או שמא שזה לשני הכיוונים - כלומר כל אחת משתי הכתובות בהגדרה ייחודית בפלט הסופי... מה שבעצם אומר פתרון המבוסס על שני מפתחות (ואז יש שאלה נוספת: האם סדר ההופעה שלהן בשורה משנה?)

אני לא יודע למה, אבל זה נשמע כאילו הכלי שלך עושה משהו דומה ל arpwatch...

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

אם אתה רוצה לממש את זה ב bash ואתה יודע איך לנצל את התכונות שבהן השתמשתי בקוד, אתה בהחלט יכול לעשות זאת. כשאני מתחיל להתעסק עם map-ים למיניהם, אני בד"כ זונח את bash לטובת שפה "ידידותית יותר למשתמש"... אני משער שתמיד אפשר לכתוב את זה איכשהו עם awk (אולי אפילו רק עם awk), אבל אם את PHP לא הבנת, הסיכוי שתבין קוד awk שעושה את אותו דבר - כנראה נמוך יותר... אא"כ זה סתם awk בסיסי שאתה הולך להריץ אותו פעם עבור כל שורה (מה עם המעבד?)

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 30-08-2016, 23:40
  בזוקה בזוקה אינו מחובר  
 
חבר מתאריך: 08.05.03
הודעות: 621
שאלה מה דעתך על זה?
בתגובה להודעה מספר 7 שנכתבה על ידי שימי שמתחילה ב "ושוב לא כתבת מי הכתובת שהיא..."

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

מה דעתך שאמזג בין 2 הקבצים:
cat OLD NEW > BOTH

ואז אבצע מיון (sort).

ובחלק האחרון אבדוק אם יש שורה שהנתונים בעמודה1 ובעמודה2 זהים
ואשתמש רק בעמודה החדשה יותר (לפי התאריך שבעמודה3).
לשם נוחות במיון, קבעתי את התאריך לפורמט הבא yymmdd (אם זה עוזר במשהו).

בשביל החלק האחרון אצטרך כמובן להיעזר בך או במישהו מהפורום פה :-)

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

נ.ב.
לא מדובר ב-arpwatch אבל אכן זה דומה (שני כתובות רשת).
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 30-08-2016, 23:50
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 8 שנכתבה על ידי בזוקה שמתחילה ב "מה דעתך על זה?"

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

אני טועה?

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 31-08-2016, 07:24
צלמית המשתמש של Benjamin Willard
  משתמש זכר Benjamin Willard Benjamin Willard אינו מחובר  
 
חבר מתאריך: 25.04.11
הודעות: 9,931
בתגובה להודעה מספר 13 שנכתבה על ידי בזוקה שמתחילה ב "אתה יכול לצרף הסבר לקוד?"

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

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

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

ובסוף אני מחזיר את התוצאה - פה כנראה צריך לכתוב לקובץ.

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


נערך לאחרונה ע"י Benjamin Willard בתאריך 31-08-2016 בשעה 07:26.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

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

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

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:17

הדף נוצר ב 0.07 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר