كيف يمكنني التعامل مع صحيح CR عند قراءة الملفات النصية مع OLEDB

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

سؤال

ولدي الملفات النصية التي هي تبويب محدد. أنا خلقت Schema.ini مثل ذلك:

[MY_FILE.TAB]
Format=TabDelimited
ColNameHeader=False
Col1=id Short
Col2=data Text

وهذا هو رمز يمكنني استخدام لقراءتها (C #):

using (var connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\FolderToData\;Extended Properties='text;FMT=delimited'"))
{
  using (var command = new OleDbCommand("SELECT * FROM MY_FILE.TAB", connection))
  {
    var table = new DataTable();
    using (var adapter = new OleDbDataAdapter(command)
    {
      adapter.Fill(table);
    }
  }
}

كل شيء يعمل بشكل جيد، ما عدا شيء واحد. البيانات في ملف نصي يحتوي على الإرجاع [CR]. يتم فصل السجلات نفسها من خلال نقل رجوع الخط الخلاصات [CR] [LF]. للأسف، OLEDB / MicrosoftJet (أو أيا كان يوزع هذه الملفات) يعامل كل من ([CR]، [CRLF]) نفسه.

ومثال على MY_FILE.TAB (يجب أن يكون هناك علامة تبويب بين الأرقام والنص):

1   One[CR][LF]
2   Two[CR][LF]
3   Th[CR]
ree[CR][LF]
4   Four[CR][LF]

ويعطي لي 5 (تالف) الصفوف في DataTable بدلا من 4.

ما احتاج اليه هو:

1   "One"
2   "Two"
3   "Th\nree"
4   "Four2

ولكن يمكنني الحصول على:

1    "One"
2    "Two"
3    "Th"
null null
4    "Four"

و"ري" لا يمكن تحويلها إلى Int32 كولوم الأول حتى الصف الرابع في باطل.

وكيف يمكنني تكوين OLEDB لعلاج [CR] مختلفة من [CR] [LF]؟ أو أي أفكار أخرى؟

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

المحلول

وأنا لا أعتقد أن تتمكن من إعادة تكوين OLEDB للقيام بذلك مباشرة.

وثمة نهج بديل يتمثل في استخدام TextReader وTextWriter لمعالجة الملف إلى ملف مؤقت، مسح واستبدال CR حدها في بعض تسلسل هروب خاص. ثم استخدام OLEDB لقراءة هذا الملف المؤقت الاستبدال؛ أخيرا، استبدل تسلسل هروب خاص مرة أخرى إلى CR.

نصائح أخرى

ولن يكون من السهل قراءة محتويات الملف في سلسلة، وتقسيم من قبل Environment.NewLine أو \r\n، والتي سوف تحصل على مجموعة واسعة لكل خط، والتي يمكنك تقسيم مزيدا من tab؟

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