سؤال

لدي ملف TXT الذي أحتاجه لاستيراده عبر تطبيق، ولكن لسبب ما أحتاج إلى فتحه في الدفتر الأول ثم حفظه قبل استيراده. أنا أظن أنه يجب القيام به مع فواصل الأسطر. السبب إذا قمت بفتحه في المفكرة أولا، فلا توجد فترات راحة سطرية، ولكن إذا قمت بفتحها باستخدام WordPad يتم فصل الخطوط.

هل يعرف أحد لماذا يحدث هذا وكيف يمكنني تجنب الاضطرار إلى فتح ملف يدويا وحفظه مع الدفتر؟ التطبيق مكتوب في VB 6 (Yikes!).

شكرا على اي مساعدة

هل كانت مفيدة؟

المحلول

هذه مشكلة خط النهاية. يريد الكود الخاص بك (والفكرة) رؤية أزواج إرجاع الإرجاع (CR) / خط التغذية (LF)، وربما يكون ذلك CR فقط (Macintosh) أو ملف LF فقط (UNIX). WordPad أكثر مسامأة، وعند حفظه على ما يبدو (لم يختبره) إنقاذ أزواج CR / LF لك.

يمكنك تغيير التعليمات البرمجية الخاصة بك في التطبيق للبحث عن أي من النهايات وعلاجها بسهولة: توقف فقط عن البحث عن VBCRLF كزوج وابحث عن إما نهاية الخط. استراتيجيتي الخاصة هي المسح الضوئي ل CR أو LF وتستهلك جميع أحرف CR / LF التي تلت ذلك: يؤدي ذلك إلى مسح الخطوط الفارغة أيضا.

نصائح أخرى

ربما يحتوي الملف على حرف عودة (CR) فقط أو حرف موجز (LF) في نهاية كل سطر.

في Windows، تحتاج إلى كل من حرف CR و LF في نهاية كل سطر. يمكن بسهولة القيام بذلك بسهولة في VB6 باستخدام VBCRLF الثابت.

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

ما لم تكن هذه الملفات كبيرة جدا والأداء أمر بالغ الأهمية، يمكن تحقيق قراءتها حسب الخط بسهولة عبر كائن Adodb.stream.

لن يتعامل فقط هذا التعامل مع العديد من محددات السطر (Stream.Vearator = ADCR، ADCRLF أو ADLF) يمكن أيضا استخدامه لمعالجة الملفات التي تحتوي على Unicode (UTF-16)، UTF-8، ANSI ANSI، وترميزات "ANSI" البديل " للحصول على لغات أخرى.

على سبيل المثال إذا كان لديك ملف نصي يحتوي على "ANSI" من لغة لغة روسية، يمكنك ضبط Stream.charset = "KOI8-R" وقراءة البيانات مع ترجمة مناسبة إلى VB6 Unicode (UNOCODE (UTF-16):

Dim Stm As ADODB.Stream
Dim Line As String
Dim Counter As Long
Set Stm = New ADODB.Stream
With Stm
    .Open
    .LoadFromFile "russian.txt"
    .Type = adTypeText
    .Charset = "koi8-r"
    .LineSeparator = adLF
    Do Until .EOS
        Line = .ReadText(adReadLine) 'Text is in Unicode now.
        Counter = Counter + 1
    Loop
    .Close
End With

الإفتراضات الافتراضية إلى القيمة "Unicode" (UNOCODE "(UTF-16) ولكن لقراءة أو كتابة الدفق في ANSI مع CODEPAGE الافتراضي يمكنك ضبطه على" ASCII "بدلا من ذلك.

HKCR MIME قاعدة البيانات Charset يحتوي على القيم المتاحة.

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