شما در یک کتابخانهی محلی شغلی گرفتهاید و به سازماندهی مجموعهی کتابهای قدیمی آن کمک میکنید. مراجعان دانشجو اغلب دنبال نقلقولهایی میگردند که نیمهیادشان مانده تا در مقالههای ترمشان به آنها استناد کنند. بهجای اینکه همهی کتابها را دستی از جلد تا جلد بخوانید، تصمیم میگیرید ابزار کوچکی بسازید که آنها را بررسی کند و این نقلقولهای ناقص را پیدا کند.
فایلها را برای یافتن خطهایی که با یک رشتهی جستوجو مطابقت دارند جستوجو کنید و همهی خطهای مطابق را برگردانید.
فرمان grep در Unix فایلها را برای یافتن خطهایی که با یک عبارت باقاعده مطابقت دارند جستوجو میکند.
وظیفهی شما پیادهسازی یک فرمان سادهشدهی grep است که از جستوجوی رشتههای ثابت پشتیبانی میکند.
فرمان grep سه آرگومان میگیرد:
سپس محتوای فایلهای مشخصشده را (به همان ترتیبی که مشخص شدهاند) میخواند، خطهایی را که شامل رشتهی جستوجو هستند پیدا میکند و در پایان آن خطها را به همان ترتیبی که پیدا شدهاند برمیگرداند.
هنگام جستوجو در چند فایل، به ابتدای هر خط مطابق، اسم فایل و یک دونقطه (':') اضافه میشود.
فرمان grep از گزینههای زیر پشتیبانی میکند:
-n شمارهی خط و یک دونقطه (':') را به ابتدای هر خط در خروجی اضافه میکند و شماره را بعد از اسم فایل (در صورت وجود) قرار میدهد.-l فقط اسم فایلهایی را خروجی میدهد که دستکم یک خط مطابق دارند.-i مطابقت را با مقایسهای بدون توجه به بزرگی و کوچکی حروف انجام میدهد.-v برنامه را معکوس میکند: همهی خطهایی را که مطابقت ندارند جمع میکند.-x فقط خطهایی را جستوجو میکند که رشتهی جستوجو با کل خط مطابقت داشته باشد.برخلاف تمرینهای دیگر، grep.js داخل فایل تست grep.spec.js ایمپورت نمیشود. در عوض، از آن مثل یک فایل اجرایی استفاده میشود. برای اینکه این کار ممکن شود، فایل grep.js با یک «shebang» و کامنتی که توضیح میدهد این خط چه کاری انجام میدهد آماده شده است:
#!/usr/bin/env node
// The above line is a shebang. On Unix-like operating systems, or environments,
// this will allow the script to be run by node, and thus turn this JavaScript
// file into an executable. In other words, to execute this file, you may run
// the following from your terminal:
//
// ./grep.js args
//
// If you do not have a Unix-like operating system or environment, for example
// Windows without WSL, you can use the following inside a window terminal,
// such as cmd.exe:
//
// node grep.js args
//
// Read more about shebangs here: https://en.wikipedia.org/wiki/Shebang_(Unix)
تستها یک پروسهی جدید Node را راهاندازی میکنند که grep.js را اجرا میکند.
برای به دست آوردن آرگومانهایی که پروسه با آنها شروع شده است، از process.argv استفاده کنید.
تابع readLines در اختیار شما قرار گرفته است. برای استفاده از آن، نیازی به تغییر مسیر فایل نیست. تابع readlines مسیر را از روی پوشهی کاری جاری مشخص میکند؛ این پوشه برای پروسههای grep.js روی پوشهی تمرین تنظیم شده است.
برای نوشتن خروجی، از موارد زیر استفاده کنید:
console.log برای نوشتن در جریان خروجی استاندارد،console.error برای نوشتن در جریان خطای استاندارد.تستها اجرا را در صورتی موفق (resolved) در نظر میگیرند که چیزی در جریان خطای استاندارد نوشته نشود و در صورتی ناموفق (rejected) که چیزی در جریان خطای استاندارد نوشته شود.
در Exercism ثبتنام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.