قراءة ملف نصي بفواصل متعددة ومعالجة المسافات: دليل فعّال للمبرمجين
في عمليات البرمجة، يمكن أن يكون قراءة ملفات النصوص مع فواصل معينة أحيانًا تحديًا، خاصةً عندما يتواجد نص في العمود الأول يحتوي على فراغات. في سياق السؤال الخاص بك، يتم استخدام فاصل “&” وقد تكون هناك تحديات في قراءة النصوص التي تحتوي على مسافات.
لحل هذه المشكلة، يمكن استخدام الكود التالي كمحاولة لقراءة الملف بشكل صحيح:
cpp#include
#include
#include
#include
int main() {
std::ifstream filein("selection.txt");
std::vector cut1, cut2;
std::string line, c1, c2;
while (std::getline(filein, line)) {
std::istringstream data(line);
std::getline(data, c1, '&');
std::getline(data, c2);
// Remove leading and trailing whitespaces
c1.erase(0, c1.find_first_not_of(" \t\n\r\f\v"));
c1.erase(c1.find_last_not_of(" \t\n\r\f\v") + 1);
cut1.push_back(c1);
cut2.push_back(c2);
}
// Now cut1 and cut2 vectors contain the separated values
// Output the results for verification
for (size_t i = 0; i < cut1.size(); ++i) {
std::cout << "Column 1: " << cut1[i] << ", Column 2: " << cut2[i] << std::endl;
}
return 0;
}
هذا الكود يستخدم std::getline
لفصل النصوص باستخدام الفاصل “&” ويقوم بتخزين النتائج في متغيرات cut1
و cut2
. يتم أيضًا إزالة المسافات الزائدة في بداية ونهاية العمود الأول باستخدام erase
.
يرجى تجربة هذا الكود وتعديله حسب احتياجاتك.
المزيد من المعلومات
في عملية قراءة الملف النصي الخاص بك، يتم استخدام مكتبة fstream
لفتح الملف والقراءة منه. تمثل std::istringstream
طريقة فعالة لفصل السلاسل من السطور، حيث يتم استخدام std::getline
للحصول على الأجزاء المختلفة بواسطة الفاصل “&”.
المعالجة بعد القراءة تتضمن إزالة المسافات الزائدة في بداية ونهاية العمود الأول باستخدام erase
لضمان دقة البيانات.
أخيرًا، يتم عرض النتائج على الشاشة باستخدام حلقة تكرار لفحص المتغيرات cut1
و cut2
.
من المهم أن تتحقق من الكود بناءً على بيانات ملف النص الخاص بك وتقوم بتعديله وفقًا لمتطلباتك الخاصة. يمكنك أيضًا تعزيز الكود ليتعامل مع حالات خاصة أخرى قد تظهر في بياناتك، مثل التعامل مع المسافات الزائدة بين الفاصل والنص في العمود الثاني، أو معاملة السطور الفارغة.