قراءة في خط ملف نصي خط فب - سطر جديد لم يتم الكشف عن

StackOverflow https://stackoverflow.com/questions/817783

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي وظيفة فب كتبت من شأنها أن تأخذ ملف نصي وقائمة كل سطر كما الصف الخاص به في جدول.

والمشكلة هي الكلاسيكية "يعمل بشكل جيد على الجهاز الخاص بي"، ولكن بالطبع عندما أطلب شخص آخر لتوليد ملف txt أنا أبحث عن، فإنه لا يكف عن القراءة في الملف بأكمله ك 1 خط. عندما فتحه في محرر النص الخاص بي، يبدو تماما كما كيف أتوقع أنه مع اسم جديد في كل سطر، ولكن لها طابع سطر جديد أو شيء رمي تشغيله.

وحتى الآن لقد وصلنا إلى استنتاج أنه قد يكون لها علاقة ما مع أي محرر نصوص أنها تستخدم على نظام ماك بهم.

هل هذا معقول؟ وليس هناك أي وسيلة سهلة للكشف فقط هذا الحرف الذي محرر النصوص هو الاعتراف كخط جديد واستبدالها بأخرى القياسية التي فب ستعترف؟

وUPDATE: إضافة السطر التالي حل مشكلة

ini_set('auto_detect_line_endings',true);

وظيفة:

function displayTXTList($fileName) {
    if(file_exists($fileName)) {
        $file = fopen($fileName,'r');
        while(!feof($file)) { 
            $name = fgets($file);
            echo('<tr><td align="center">'.$name.'</td></tr>');
        }
        fclose($file);
    } else {
        echo('<tr><td align="center">placeholder</td></tr>');
    }       
}
هل كانت مفيدة؟

نصائح أخرى

ما هو الخطأ في file() ؟

foreach (file($fileName) as $name) {
    echo('<tr><td align="center">'.$name.'</td></tr>');
}

ومن صفحة رجل fgets :

<اقتباس فقرة>   

ملحوظة: إذا PHP وعدم الاعتراف بشكل صحيح النهايات السطر عند قراءة الملفات إما أو التي أنشأتها كمبيوتر ماكنتوش، مما يتيح في auto_detect_line_endings وقت التشغيل خيار التكوين قد تساعد في حل المشكلة.

وأيضا، هل حاول ملف وظيفة؟ تقوم بإرجاع مجموعة. كل عنصر في مجموعة يتوافق مع خط في الملف.

وتحرير: إذا لم يكن لديك الوصول إلى ملف php.ini، ما خادم الويب الذي تستخدمه؟ في Apache، يمكنك تغيير إعدادات PHP باستخدام ملف هتكس . هناك أيضا وظيفة ini_set الذي يسمح بتغيير الإعدادات في وقت التشغيل.

وهذه هي حالة كلاسيكية من مشكلة السطر الجديد.

وASCII يحدد عدة مختلفة الأحرف "سطر جديد". اثنين منها محددة نهتم هي ASCII 10 (سطر تغذية، LF) و 13 (إرجاع، CR).

والنظم القائمة على يونكس جميع، بما في ذلك OS X، لينكس، وما إلى ذلك استخدام LF كما سطر جديد. يستخدم نظام التشغيل Mac OS كلاسيك CR فقط أن تكون مختلفة، ويستخدم نظام التشغيل Windows CR LF (هذا صحيح، وهما حرفا لسطر جديد - ترى لماذا لا أحد يحب ويندوز مجرد مزاح). كما سطر جديد

وبالتالي، ملفات نصية من شخص ما في ماك (على افتراض انها OS الحديث) أن يكون كل LF كما خطهم تنتهي. إذا كنت تحاول قراءتها على ويندوز، ويندوز تتوقع CR LF، فإنه لن تجد. الآن، لها بالفعل تم ذكرها أن PHP لديه القدرة على فرز هذه الفوضى للكم، ولكن إذا كنت تفضل، هنا حل القص الذاكرة:

$file = file_get_contents("filename");
$array = split("/\012\015?/", $file); # won't work for Mac Classic

وبالطبع، يمكنك أن تفعل الشيء نفسه مع file() (<لأ href = "https://stackoverflow.com/questions/817783/read-in-text-file-line-by-line-php-newline- لا الرفاه-الكشف عن / 817825 # 817825 "> كما ذكر سابقا ).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top