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