هل هناك مونو (.NET) مكافئ فئة الماسحة الضوئية في جافا
-
18-09-2019 - |
سؤال
في Java، هناك فئة لطيفة تسمى الماسح الضوئي لقراءة سلاسل وتدفقات تنسيق معين لهياكل البيانات مثل الأعداد الصحيحة، يطفو، ... هل هناك أي ما يعادله في أحادي؟ في .NET هناك قارئ ثنائي، لكنه يقرأ البيانات كمبالين. أريد فصل قراءة البيانات عن طريق تحليله من سلسلة.
تحرير: رد الفعل على الإجابات الحالية، أعرف أن معظم أنواع البيانات لها طريقة تحليل، ولكن المشكلة مع هذه هي، فهي لا تقرأ السلسلة بالتتابع. في Java، يمكنك ببساطة تهيئة الكائن، ومن خلال تنشيط الأساليب، يمكنك قراءة أنواع البيانات بالتتابع.
المحلول
حسنا، نظرا لأنك تقرأ ملف في حالات الاختبار، فسوف أفترض أنك تعرف التنسيق الدقيق للبيانات الواجب وكيف يحتاج إلى تحليله. النظر إلى جافا Parser
فئة في الوثائق تجعلها تبدو معقدة للغاية أو أكثر بكثير من فئة راحة. يبدو أنه يقوم فقط بتكييس سلسلة Stream على المسافات وتوفير الوظائف لأخذ الرمز المميز وتحليله. وحتى كما أعرف، ليس لديه .NET فئة معادلة. لذلك إذا كنت تريد واحدة لإعادة الاستخدام، فستحتاج إلى كتابة واحدة بنفسك.
لكن الخوارزمية الأساسية التي تحتاجها هي قراءة محتويات الملفات، وتقسيم الرموز، وتحليلها. إذا كان الملف الخاص بك حجم معقول، فيمكنك استخدامه File.ReadAllLines()
الذي يقرأ محتويات خط ملف الملفات في String[]
. وبعد أو يمكنك استخدام StreamReader
فئة لقراءة الخطوط واحدة في وقت واحد باستخدام لها ReadLine()
. وبعد ثم بمجرد أن يكون لهم في خط، فإنك ستخبطها String
'س Split()
, ثم تحليلهم.
عدم معرفة بالضبط كيف تحتاج إلى استخدام القيم في الملف، يمكن أن يكون نمط أساسي للغاية:
// Read in the whole file
String[] strLines = File.ReadAllLines(strFilePath);
// Loop through each of the lines to process their contents
foreach (String strLine in strLines) {
// Tokenize on the spaces
String[] strTokens = strLine.Split(' ');
// Parse the values
int iIntValue = Int.Parse(strTokens[0]);
double dDoubleValue = Double.Parse(strTokens[1]);
// Do something with the values
}
خلق الخاصة بك Parser
سيسمح لك الطبقة بالحفاظ على الرموز المتقدمة للدولة والتوتر أثناء استخدامها. إذا ذهبت هذا الطريق، StreamReader
قد يكون الخيار الأفضل.
نصائح أخرى
سيكون معظم أنواع البيانات الأساسية .Parse
و .TryParse()
الأساليب التي سوف تفعل ذلك من أجلك.
على سبيل المثال Int32.tryparse. طريقة.
في .NET، العديد من النوع لديه ثابت .Parse()
و .TryParse()
الأساليب التي تأخذ معلمة سلسلة.
يمكنك أن تفعل شيئا مثل:
Stream s = new Stream();
// Wire up the stream.
StreamReader reader = new StreamReader(s);
String value = reader.ReadToEnd();
int valueAsInt = Int32.TryParse(value);