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

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



  #4  
ישן 01-06-2018, 08:46
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 3 שנכתבה על ידי בזוקה שמתחילה ב "מוזר"

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

דורש php-cli מותקן על המכונה...

קוד PHP:
 #!/bin/env php
<?php

###
# Search for numbers in a specific range across text files
#
# Copyright Shimi (numberfinder AT shimi.net)
#
# Licensed under GNU GPL v2 (and NOT a later version thereof). See https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
#
# There is no warranty of any kind! See section #11 in the license above.
#
###

if ($argc 4) {
    die(
"Usage: {$argv[0]} <min> <max> <file1> [<file2>] [<fileN>]\n");
}

if (!
is_numeric($argv[1])) {
    echo 
"{$argv[1]} is not a valid number! Aborting!\n";
    exit(
2);
} else {
    
$min $argv[1];
}

if (!
is_numeric($argv[2])) {
    echo 
"{$argv[2]} is not a valid number! Aborting!\n";
    exit(
2);
} else {
    
$max $argv[2];
}

if (
$max $min) {
    echo 
"Do you really think [$max] is smaller than [$min]?\n";
    exit(
2);
}

echo 
"Range has been set to [{$min}-{$max}]. Validating files existence... ";

array_shift($argv);
array_shift($argv);
array_shift($argv);

$files = array();
$missing = array();
while (
$file array_shift($argv)) {
    if (
file_exists($file) && !is_dir($file)) {
        
$files[] = $file;
    } else {
        
$missing[] = $file;
    }
}

if (
count($missing)) {
    echo 
'ERROR! The following files were not found: ['.implode(', '$missing)."]. Aborting!\n";
    exit(
1);
} else {
    echo 
"everything is OK! Starting to search...\n";
}

foreach(
$files as $file) {
    
$fp fopen($file'r');
    if (
$fp) {
        
$linecount=0;
        while(!
feof($fp)) {
            
$line trim(fgets($fp));
            
$linecount++;
            
$split explode(' '$line);
            foreach(
$split as $word) {
                if (
is_numeric($word) && $word >= $min && $word <= $max) {
                    echo 
"{$file}:{$linecount}:{$line}\n";
                }
            }
        }
        
fclose($fp);
    } else {
        echo 
"Failed opening file [$file]! Permissions issue?\n";
    }
}
?> 


הערה: תומך ברשימת קבצים - אבל לא יודע לעשות רקורסיה לתוך ספריות לבדו (כמו r- ב grep). אם תעשה dir/*.txt כנראה שזה יעבוד.

הערה2: ה regexp שלך גם היה מבין לא נכון מספרים שאינם שלמים... (עם נקודה עשרונית). הקוד הנ"ל by design לא מתחשב במספרים עם פסיקים-אלפוניים (על משקל נקודות עשרוניות...) בתוך "מספרים". כלומר 1,234 לא נחשב מספר. אפשר לשנות כמובן את הקוד אם תרצה...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 01-06-2018, 13:20
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 5 שנכתבה על ידי בזוקה שמתחילה ב "לא עובד (או שלא הבנתי נכון)"

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

ריצה לחיפוש מספרים בין 10 ל 20:
קוד:
$ cat bazooka.txt line number 1 with no 2-digit numbers line number 2 with a 2 digit number like 20 line number 3 with a 3 digit number like 100 $ ./numberfinder.php 10 20 bazooka.txt Range has been set to [10-20]. Validating files existence... everything is OK! Starting to search... bazooka.txt:2:line number 2 with a 2 digit number like 20
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

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

לא שמתי לב לתגובה עד עכשיו, סורי.

תודה על המחמאה, אבל... פירסור טקסטים זה לא מדע טילים, אנשי DevOps מקדישים חלק לא קטן מזמנם לעשות בדיוק את זה.

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

יכול להיות שיש אלגוריתם לבנות את הדבר העקום הזה, בייחוד בצורה יעילה. אם אתה רוצה פתרון גנרי שעובד בשיטת regexp, אתה יכול פשוט לעשות משהו שבונה את רשימת המספרים האפשריים מהטווחים (פיצול לפי סימני פסיק, ואז לולאת for על ערך מינימום ומקסימום שפוצלו על ידי סימן מינוס, ואם אין מינוס, אז ה literal string), ואז שיעשה regexp שכולו בעצם OR בין כל המספרים (מפרידים אותם בסימן | ) - זה יהיה נוראי, אבל זה יהיה regexp ואין סיבה שזה לא יעבוד, אם אין הגבלות במנוע שמריץ את זה...

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

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

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

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