الفرق بين المراجعتين لصفحة: «Ruby/Dir/glob»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Dir]] | [[تصنيف: Ruby Dir]] | ||
يوسّع التابع <code>glob</code> | يوسّع التابع <code>glob</code> الوسيطَ الممرّر <code>pattern</code> (انظر فقرة البنية العامة)، والذي هو عبارة عن سلسلة نصية نمطية (pattern string) أو مصفوفة من السلاسل النصية النمطية، ويعيد مصفوفة تحتوي أسماء الملفات المُطابقة لذلك النمط. في حال تم إعطاء كتلة (block)، فسيستدعي التابع <code>glob</code> الكتلة مرة واحدة على كل اسم ملف مطابق، بحيث يمرّر اسم الملف كوسيط إلى الكتلة. | ||
يحدد الوسيط الاختياري <code>base</code> المجلد الأساسي (base directory) لتأويل أسماء المسارات (pathnames) بدلاً من مجلد العمل الحالي. | يحدد الوسيط الاختياري <code>base</code> المجلد الأساسي (base directory) لتأويل أسماء المسارات (pathnames) بدلاً من مجلد العمل الحالي. وبما أنّ النتائج لا تكون مسبوقة باسم المجلد الأساسي في هذه الحالة، فسيكون عليك إضافة اسم المجلد الأساسي إذا أردت الحصول على مسارات صالحة. | ||
تجدر الإشارة إلى أنّ هذا النمط (pattern) ليس تعبيرًا نمطيًا (regexp)، ولكنّه أقرب إلى shell glob. راجع صفحة <code>[[Ruby/File/fnmatch|File.fnmatch]]</code> للتعرف على | تجدر الإشارة إلى أنّ هذا النمط (pattern) ليس تعبيرًا نمطيًا (regexp)، ولكنّه أقرب إلى shell glob. راجع صفحة <code>[[Ruby/File/fnmatch|File.fnmatch]]</code> للتعرف على معاني الوسيط <code>flags</code>. | ||
تعتمد الحساسية لحالة الحروف (Case sensitivity) على النظام الخاص بك (يتم تجاهل الملف <code>File::FNM_CASEFOLD</code>) ، كما هو الحال بخصوص الترتيب الذي تٌعاد به النتائج. | تعتمد الحساسية لحالة الحروف (Case sensitivity) على النظام الخاص بك (يتم تجاهل الملف <code>File::FNM_CASEFOLD</code>) ، كما هو الحال بخصوص الترتيب الذي تٌعاد به النتائج. | ||
سطر 37: | سطر 37: | ||
|- | |- | ||
|<code>[set]</code> | |<code>[set]</code> | ||
| colspan="2" |تتطابق مع أي محرف مُفرد في set. تتصرف بالضبط مثل مجموعات الأحرف في Regexp، بما في المجموعات المنفية (<code>[^a-z]</code>). | | colspan="2" |تتطابق مع أي محرف مُفرد في set. تتصرف بالضبط مثل مجموعات الأحرف في Regexp، بما في ذلك المجموعات المنفية (<code>[^a-z]</code>). | ||
|- | |- | ||
|<code>{p,q}</code> | |<code>{p,q}</code> | ||
سطر 47: | سطر 47: | ||
| colspan="2" |يُخلّص (Escapes) الحرف التالي. | | colspan="2" |يُخلّص (Escapes) الحرف التالي. | ||
لاحظ أنّ هذا يعني أنه لا يمكنك استخدام الشرطة المائلة للخلف (<code>\</code>) في ويندوز في <code>glob</code>، أي | لاحظ أنّ هذا يعني أنه لا يمكنك استخدام الشرطة المائلة للخلف (<code>\</code>) في ويندوز في <code>glob</code>، أي أنّ <code>Dir ["c: \ foo *"]</code> لن تعمل، استخدم <code>Dir ["c: / foo *"]</code> بدلاً من ذلك. | ||
|} | |} | ||
== البنية العامة == | == البنية العامة == | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby"> | ||
glob( pattern, [flags], [base: path] ) → array | glob( pattern, [flags], [base: path] ) → array | ||
glob( pattern, [flags], [base: path] ) { |filename| block } → nil | glob( pattern, [flags], [base: path] ) { |filename| block } → nil | ||
</syntaxhighlight> | </syntaxhighlight> | ||
سطر 65: | سطر 65: | ||
== القيمة المٌعادة == | == القيمة المٌعادة == | ||
يعيد مصفوفة تحتوي أسماء الملفات | يعيد مصفوفة تحتوي أسماء الملفات المطابقة للنمط <code>pattern</code>. | ||
== أمثلة == | == أمثلة == |
مراجعة 16:47، 23 سبتمبر 2018
يوسّع التابع glob
الوسيطَ الممرّر pattern
(انظر فقرة البنية العامة)، والذي هو عبارة عن سلسلة نصية نمطية (pattern string) أو مصفوفة من السلاسل النصية النمطية، ويعيد مصفوفة تحتوي أسماء الملفات المُطابقة لذلك النمط. في حال تم إعطاء كتلة (block)، فسيستدعي التابع glob
الكتلة مرة واحدة على كل اسم ملف مطابق، بحيث يمرّر اسم الملف كوسيط إلى الكتلة.
يحدد الوسيط الاختياري base
المجلد الأساسي (base directory) لتأويل أسماء المسارات (pathnames) بدلاً من مجلد العمل الحالي. وبما أنّ النتائج لا تكون مسبوقة باسم المجلد الأساسي في هذه الحالة، فسيكون عليك إضافة اسم المجلد الأساسي إذا أردت الحصول على مسارات صالحة.
تجدر الإشارة إلى أنّ هذا النمط (pattern) ليس تعبيرًا نمطيًا (regexp)، ولكنّه أقرب إلى shell glob. راجع صفحة File.fnmatch
للتعرف على معاني الوسيط flags
.
تعتمد الحساسية لحالة الحروف (Case sensitivity) على النظام الخاص بك (يتم تجاهل الملف File::FNM_CASEFOLD
) ، كما هو الحال بخصوص الترتيب الذي تٌعاد به النتائج.
*
|
تطابق كل الملفات. يمكن تقييدها بقيم أخرى في glob . مكافئة لـ / .* /x في regexp .
| |
* | يطابق كل الملفات | |
c* | تتطابق مع جميع الملفات التي تبدأ بـ c
| |
*c | تتطابق مع جميع الملفات التي تنتهي بـ c
| |
*c* | تطابق جميع الملفات التي تحتوي c (بما في ذلك في البداية أو النهاية) | |
لاحظ أنّ هذا لن يتطابق مع الملفات المخفية المشابهة لنظام Unix (Unix-like) (الملفات النقطية dotfiles). لتضمينها في نتائج المطابقة، يجب استخدام الراية File::FNM_DOTMATCH أو شيءًا مثل "{*,.*} ".
| ||
**
|
تطابق المجلدات تعاوديًا (recursively). | |
? | تطابق أي محرف مُفرد. إذ تكافئ /.{1}/ في regexp.
| |
[set]
|
تتطابق مع أي محرف مُفرد في set. تتصرف بالضبط مثل مجموعات الأحرف في Regexp، بما في ذلك المجموعات المنفية ([^a-z] ).
| |
{p,q}
|
تتطابق حرفيًا إما مع p أو مع q . وتكافئ النمط التناوبي (pattern alternation) في regexp.
المطابقة الحرفية قد تكون أكثر من حرف واحد. قد يتم تحديد أكثر من حرفين. | |
\
|
يُخلّص (Escapes) الحرف التالي.
لاحظ أنّ هذا يعني أنه لا يمكنك استخدام الشرطة المائلة للخلف ( |
البنية العامة
glob( pattern, [flags], [base: path] ) → array
glob( pattern, [flags], [base: path] ) { |filename| block } → nil
المعاملات
pattern
سلسلة نصية نمطية (pattern string) أو مصفوفة من السلاسل النصية النمطية،
base
المجلد الأساسي (base directory) لتأويل أسماء المسارات (pathnames)
القيمة المٌعادة
يعيد مصفوفة تحتوي أسماء الملفات المطابقة للنمط pattern
.
أمثلة
مثال عن استخدام التابع glob
على المجلد testdir
الذي يحتوي ملفين عاديين (config.h
و main.rb
) ، والمجلد الأب (..
) ، والمجلد نفسه (.
).
Dir["config.?"] #=> ["config.h"]
Dir.glob("config.?") #=> ["config.h"]
Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
Dir.glob("*.[^r]*") #=> ["config.h"]
Dir.glob("*.{rb,h}") #=> ["main.rb", "config.h"]
Dir.glob("*") #=> ["config.h", "main.rb"]
Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "..", "config.h", "main.rb"]
rbfiles = File.join("**", "*.rb")
Dir.glob(rbfiles) #=> ["main.rb",
# "lib/song.rb",
# "lib/song/karaoke.rb"]
Dir.glob(rbfiles, base: "lib") #=> ["song.rb",
# "song/karaoke.rb"]
libdirs = File.join("**", "lib")
Dir.glob(libdirs) #=> ["lib"]
librbfiles = File.join("**", "lib", "**", "*.rb")
Dir.glob(librbfiles) #=> ["lib/song.rb",
# "lib/song/karaoke.rb"]
librbfiles = File.join("**", "lib", "*.rb")
Dir.glob(librbfiles) #=> ["lib/song.rb"]
أنظر أيضًا
- صفحة الصنف
Dir
.