احذف الصفوف المكررة من CSV
أداة تحذف الصفوف المكررة تمامًا من جدول CSV، مع خيار تحديد أعمدة معينة تُعتمَد أساسًا للمطابقة بدل الصف كاملًا. تعمل داخل متصفحك مباشرة دون رفع الملف لأي خادم، وتناسب من يجمع بيانات من مصادر متعددة تتكرر فيها السجلات نفسها أكثر من مرة.
شغّل الأداة مجانًا
تعمل هذه الأداة داخل متصفحك — مجانًا، ولا تُرسل بياناتك إلى أي خادم
متى يكفي التطابق الحرفي ومتى لا يكفي
التكرار الحرفي — صف مطابق لصف آخر حرفًا بحرف — هو الحالة الأبسط، وتحدث كثيرًا عند دمج ملفين يحملان تصديرًا جزئيًا متداخلًا من النظام نفسه. تحذف الأداة هذا النوع مباشرة، مع إبقاء أول ظهور فقط لكل سجل. أما التكرار الذي يختلف فيه شكل الكتابة — كاسم مكتوب بمسافة إضافية أو حرف كبير مختلف — فيحتاج مطابقة دلالية أذكى، وهي أداة منفصلة مخصصة لهذا النوع تحديدًا.
تحديد أعمدة المطابقة
بدل مقارنة الصف كاملًا، يمكن تحديد عمود أو أكثر — كرقم الهاتف أو البريد الإلكتروني — لتُعتبَر السجلات التي تتطابق فيها هذه الأعمدة فقط تكرارًا، حتى لو اختلفت بقية الأعمدة بينها. هذا مفيد حين يحمل السجل المكرر تحديثًا في حقل واحد فقط، مثل تاريخ آخر اتصال، بينما بقية البيانات كما هي؛ يبقى السجل الأحدث ويُحذف الأقدم بدل الاحتفاظ بنسختين متعارضتين.
الاستخدام من الصفحة مباشرة
ألصق محتوى الملف أو ارفعه، حدد أعمدة المطابقة إن لزم، وانسخ النتيجة أو نزّلها. تجري المعالجة داخل متصفحك: لا يغادر الملف جهازك، ولا حدّ لعدد المرات، ولا حاجة لتسجيل. تناسب جداول تصل حتى 25 MB، وتعمل من الجوال بالطريقة نفسها التي تعمل بها من الحاسوب. يظهر عدد الصفوف المحذوفة بوضوح بعد كل تشغيل، فتتأكد من حجم التكرار الفعلي قبل اعتماد النتيجة.
الأتمتة عبر الـAPI لقوائم كبيرة
من يدمج قوائم عملاء أو جهات اتصال من مصادر متعددة بانتظام يحتاج إزالة التكرار ضمن خط عمل آلي، لا فحصًا يدويًا لآلاف السجلات. نفس المحرك متاح عبر الـAPI بسعر ثابت قدره $0.002 لكل ألف صف، دون اشتراك شهري، مناسب لنظام يدمج قائمة بريدية من عدة حملات قبل كل إرسال. يمكن ضبط أعمدة المطابقة نفسها في كل استدعاء، فيبقى سلوك التكرار ثابتًا ومتوقعًا عبر كل عملية دمج.
حالات الاستخدام
دمج قوائم عملاء من حملتين إعلانيتين
تدمج شركة الخليج الرقمية قوائم مسجّلين من حملتين إعلانيتين منفصلتين، وتحذف التكرار حسب البريد الإلكتروني قبل إرسال رسالة ترحيبية واحدة لكل شخص.
تنظيف قائمة موردين من نظامين قديمين
توحّد مؤسسة النخيل للمقاولات قائمة موردين من نظامين قديمين مندمجين، وتحذف السجلات المكررة حسب الرقم الضريبي قبل الاعتماد النهائي.
تصفية نتائج استيراد متكرر بالخطأ
يستورد خالد العتيبي الملف نفسه مرتين بالخطأ في نظامه المحاسبي؛ يستخدم الأداة لحذف الصفوف المكررة بالكامل قبل رفع النسخة النظيفة.
الأسئلة الشائعة
هل يمكن تحديد عمود واحد فقط لاعتماد التكرار؟
نعم، يمكن اختيار عمود أو أكثر، كالبريد الإلكتروني أو رقم الهاتف، لتُعتبَر السجلات المتطابقة فيه تكرارًا حتى لو اختلفت بقية الأعمدة.
أي نسخة تبقى عند وجود تكرار؟
يبقى أول ظهور للسجل افتراضيًا؛ عند اعتماد عمود تاريخ يمكن الإبقاء على الأحدث بدل الأول.
هل الأداة مجانية؟
نعم، داخل المتصفح بلا حدّ وبلا تسجيل. المدفوع فقط عبر الـAPI بسعر $0.002 لكل ألف صف.
هل يُرسل ملفي إلى خادم؟
لا، عند الاستخدام من هذه الصفحة تجري المعالجة داخل متصفحك فقط.
هل تكتشف الأداة تكرارًا بفروقات إملائية بسيطة؟
لا، هذه أداة التطابق الحرفي أو حسب عمود محدد؛ اكتشاف التشابه الدلالي متاح في أداة منفصلة.
ما أقصى حجم ملف مدعوم؟
25 ميغابايت في الطلب الواحد.
هل يعمل من الجوال؟
نعم، بالطريقة نفسها التي يعمل بها من الحاسوب.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/data/dedupe-csv \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/data/dedupe-csv", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/dedupe-csv",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/dedupe-csv", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/dedupe-csv", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "…"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.dedupe_csv",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 25 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |