العثور على الأسطر المشتركة بين نصين
قارن apple وbanana وcherry وbanana وpear مع pear وbanana وorange وbanana لتحصل على banana وpear: كل سطر مشترك مرة واحدة وبترتيب القائمة الأولى. المطابقة دقيقة افتراضيًا، مع خيار لتجاهل حالة الأحرف. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص a
- apple banana cherry banana pear
- النص b
- pear banana orange banana
- النص
- banana pear
- الأسطر المشتركة
- banana, pear
- العدد المشترك
- 2
- أسطر النص A
- 5
لا ينبغي أن يتطلب العثور على الجزء المشترك بين قائمتين ملصقتين معادلة في جدول بيانات أو سلسلة أوامر أو مراجعة يدوية مرهقة. تقارن هذه الأداة نصين متعددي الأسطر، ثم تعرض الأسطر الفريدة الموجودة في كليهما. تتبع النتائج ترتيب النص الأول، ولذلك يسهل توقعها ولصقها في سير عمل آخر. تكون المقارنة تامة افتراضيًا، فتظل المسافات وعلامات الترقيم وحالة الأحرف ذات أهمية. ويمكن تفعيل خيار تجاهل حالة الأحرف لمطابقة Apple مع apple مع الاحتفاظ بالصياغة الأصلية الواردة في النص الأول.
كيفية عمل مقارنة الأسطر المشتركة
تتعامل الإمكانية مع كل إدخال بوصفه تسلسلًا من الأسطر، ثم تحسب تقاطع المجموعتين. تبدأ بتحويل نهايات الأسطر التي تحتوي على محرف الرجوع إلى فواصل أسطر عادية، وبذلك يمكن مقارنة قائمة منشأة في Windows بقائمة منشأة في Unix من دون فروق زائفة سببها تنسيق الملف وحده. يتحول كل سطر في النص الثاني إلى مفتاح بحث، ثم يُفحص النص الأول من أعلاه إلى أسفله.
يُضاف السطر إلى الناتج عندما يكون مفتاحه موجودًا في المجموعة الثانية ولم يسبق إخراجه. وهكذا يظهر كل سطر مشترك مرة واحدة، وفق ترتيب ظهوره الأول في النص الأول. تكون المقارنة تامة افتراضيًا، لذلك تؤثر المسافات في البداية والنهاية وعلامات الترقيم واللكنات وحالة الأحرف في التطابق.
وتُعد الأسطر الفارغة قيمًا صحيحة، فتظهر مرة واحدة إذا وُجدت في كلا الإدخالين.
استخدامات عملية لتقاطع القوائم
تفيد مطابقة الأسطر المشتركة كلما صدّر نظامان قيمة واحدة في كل صف واحتجتم إلى معرفة الجزء المتداخل. يستطيع مسؤول الإصدارات مقارنة أسماء الحزم في عمليتي نشر لمعرفة التبعيات المشتركة. ويمكن لفريق التحليل لصق شرائح العملاء من تقريرين منفصلين والحصول على المعرّفات الموجودة في كليهما من دون رفع مصنف أو كتابة عملية ربط.
وتستطيع فرق المحتوى مقارنة الكلمات المفتاحية أو الوسوم أو عناوين URL مع الحفاظ على ترتيب الأولوية في المصدر الأول. كما تصلح الأداة لمقاطعة قوائم المفردات والحضور ورموز المخزون في لقطتين. عند التعامل مع مواد حساسة، تذكروا أن المقارنة حرفية وليست دلالية؛ فهي لا تقرر ما إذا كانت النطاقات أو الأسماء أو المسارات المتشابهة تشير إلى الشيء نفسه.
كذلك لا تحذف المسافات ولا تطبّع Unicode ولا ترتب النتائج ولا تحسب مرات التكرار ولا تستخرج الأسطر الموجودة في جانب واحد فقط. هذه اختيارات مقصودة لأن التنظيف الصامت قد يدمج قيمًا ينبغي أن تبقى منفصلة. جهزوا القوائم أو طبّعوها أولًا إذا تطلب سير العمل ذلك، ثم استخدموا هذه الإمكانية لإجراء تقاطع واضح.
تناسب المصفوفة التطبيقات، بينما يناسب النص الموصول النسخ واللصق المباشرين.
حالات الاستخدام
مقارنة قوائم المعرّفات
اعثروا على الحسابات أو المنتجات أو المفاتيح الموجودة في تصدير نظامين مع حفظ ترتيب التصدير الأول.
مقاطعة الوسوم والكلمات المفتاحية
حددوا الوسوم أو عبارات البحث أو الفئات المشتركة، مع إمكان تجاهل حالة الأحرف عند المقارنة.
فحص قوائم مكونات النشر
قارنوا قوائم الحزم أو الخدمات ذات العنصر الواحد في كل سطر، واستخرجوا العناصر الفريدة الموجودة في البيئتين.
الأسئلة الشائعة
هل تُعاد الأسطر المشتركة المكررة أكثر من مرة؟
لا. يُعاد كل سطر مطابق مرة واحدة، حتى إن ظهر مرات متعددة في أي من الإدخالين.
هل تتجاهل الأداة المسافات حول السطر؟
لا. المسافات ذات أهمية؛ فالسطر المنتهي بمسافات يختلف عن السطر المطابق ظاهريًا من دونها.
بأي ترتيب تظهر الأسطر المشتركة؟
بترتيب ظهورها الأول في النص الأول، لا بالترتيب الأبجدي ولا بترتيب القائمة الثانية. لهذا يأتي banana قبل pear في المثال، رغم أن pear يأتي أولًا في القائمة الثانية.
هل يمكن أن تتطابق أسطر تختلف في حالة الأحرف فقط؟
نعم، فعّل خيار تجاهل حالة الأحرف فيتطابق Apple مع apple. وتحتفظ النتيجة بكتابة النص الأول، فلا تفقد طريقة الكتابة الأصلية.
هل تعرض الأداة الأسطر الموجودة في قائمة واحدة فقط؟
لا. تُعيد التقاطع فقط، أي الأسطر الموجودة في النصين معًا. ولا تبيّن ما ينقص من كل جانب، ولا ترتّب النتيجة، ولا تعدّ مرات تكرار السطر.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/str/common-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text_a":"apple\nbanana\ncherry\npear","text_b":"banana\npear\norange"}'const res = await fetch("https://api.kit.forhosting.com/str/common-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/common-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/common-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text_a":"apple\\nbanana\\ncherry\\npear","text_b":"banana\\npear\\norange"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text_a":"apple\nbanana\ncherry\npear","text_b":"banana\npear\norange"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/common-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text_a": "apple\nbanana\ncherry\npear",
"text_b": "banana\npear\norange"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.common_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_chars_per_text | 65536 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تُوحَّد نهايات الأسطر المستخدمة في Windows وUnix وأنظمة Mac القديمة قبل المقارنة، وتعمل الوظيفة الحتمية نفسها في المتصفح وعبر API.
كيفية عمل مقارنة الأسطر المشتركة
عند تفعيل ignore_case، تتحول مفاتيح المقارنة وحدها إلى أحرف صغيرة، بينما تحتفظ القيمة المعادة بتهجئتها الأصلية من النص الأول. تنفذ الخوارزمية عمليات مسح خطية محدودة ولا تستخدم الشبكة أو النماذج أو العشوائية أو الساعة، ولهذا تعيد المدخلات المتطابقة دائمًا JSON نفسه.
اختيار المدخلات وقراءة النتيجة
يقبل كل حقل حتى 65,536 محرفًا. يناسب الوضع التام أسماء المستخدمين الحساسة لحالة الأحرف ومفاتيح الإعدادات وقيم التجزئة والمسارات والرموز التي يكون لكل محرف فيها أهمية. لا تؤدي التكرارات في أي مصدر إلى تكرار الناتج، لأن العملية تقاطع مجموعات وليست مطابقة بين مرات الظهور. أرسلوا text_a وtext_b كسلسلتين غير فارغتين تحتويان على القائمتين أو كتلتي النص المراد مقارنتهما. افصلوا العناصر بفواصل أسطر، واتركوا ignore_case محذوفًا أو بقيمة false عندما يجب أن تتطابق المعرّفات تطابقًا تامًا. فعّلوا ignore_case للفئات وأسماء المنتجات والوسوم وقوائم النطاقات التي لا تهم فيها حالة الأحرف. تتضمن الاستجابة text، وهي نسخة موصولة بفواصل أسطر وجاهزة للنسخ؛ وcommon_lines، وهي القيم نفسها في مصفوفة JSON؛ وcommon_count، وهو عدد الأسطر المشتركة الفريدة. كما تعرض عدد الأسطر بعد توحيدها في كلا الإدخالين وقيمة ignore_case المطبقة. يأتي الترتيب من text_a لا من text_b ولا من فرز أبجدي. تعيد القيمة المفقودة أو الفارغة أو غير النصية أو المتجاوزة للحد خطأ invalid_input. تكلف معالجة API الناجحة $0.002 لكل عنصر، بينما ينفذ المتصفح المنطق الخالص نفسه محليًا.
أسئلة تقنية
أي إدخال يحدد ترتيب النتيجة؟
يحدد النص الأول الترتيب. تتبع الأسطر المشتركة ترتيب ظهورها الأول في text_a.
ماذا يغير الخيار ignore_case؟
يقارن مفاتيح محولة إلى أحرف صغيرة، لكنه يحتفظ في النتيجة بالصياغة الأصلية من text_a.
ما تكلفة طلب API؟
يكلف طلب API الناجح $0.002 لكل عنصر. تنفذ نسخة الويب المنطق الحتمي نفسه محليًا.