Итак, у меня есть два файла: файл mot и файл xml. Что мне нужно сделать с этими файлами, так это прочитать данные из файла xml и сравнить их с файлом mot, если он существует. Это общая идея.
Прежде всего, для тех, кто не знаком с тем, что такое mot-файл (у меня тоже нет особых знаний об этом, только основы)...
(Из Википедии) Файл mot (или файл Motorola S-Record) представляет собой формат файла, который передает двоичную информацию в текстовой форме ASCII Hex. .
(из другого источника) S-запись файл состоит из последовательности специально отформатированных строк символов ASCII. Длина S-записи будет меньше или равна 78 байтам.Формат S-Record:
S | Тип | Длина записи | Адрес (начальный адрес) | Данные | Контрольная сумма
(например, S21404200047524D5354524D0000801410AA5AA555F9)
([разобрано] S2 14 042000 47524D5354524D0000801410AA5AA555 F9)
Конкретная идея в том, что у меня данные AA BB CC DD и т. д. размещены по адресам 0x042000 ~ 0x04200F. То, что написано в xml, будет:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<record>
<File name="Test.mot">
<Address id="042000">
<Data>AA</Data>
</Address>
</File>
</record>
<record>
<File name="Test.mot">
<Address id="042001">
<Data>BB CC DD</Data>
</Address>
</File>
</record>
<record>
<File name="Test.mot">
<Address id="042004">
<Data>EE FF</Data>
</Address>
</File>
</record>
Затем программа получала данные и адрес из XML и искала в файле .mot любые совпадения. Итак, если в mot-файле есть запись S214042000AABBCCDDEEFF01234567891A2B3C4D5EF9
, то это должно привести к совпадению с тем, что есть в xml. Результат — true или 1. Если что-то в xml не соответствует, то возвращается false или 0.
Теперь проблема будет заключаться в том, что я плохо разбираюсь в C#, а тем более в XML, хотя у меня был небольшой опыт работы с обоими. Я изначально думал, что это будет что-то вроде этого:
using (StreamReader sr = new StreamReader("Test.mot"))
{
String line =String.Empty;
while ((line = sr.ReadLine()) != null)
{
if (line.Contains("042004") & line.Contains("EE FF"))
{
Console.WriteLine("Success");
}
else
{
Console.WriteLine("Failure");
}
}
}
Но, очевидно, это не привело к тому, что я ожидал. И Failure
продолжает появляться. Имею ли я право использовать StreamReader
для чтения файла .mot? А что касается файла XML, XMLDocument
будет работать? Как получить данные из xml и сравнить их с файлом .mot? Может ли кто-нибудь рассказать мне, как это сделать, или предоставить руководства, как правильно начать с этого.
Дайте мне знать, если мне что-то непонятно.
РЕДАКТИРОВАТЬ:
Я придумал идею. Хотя я не уверен, что это выполнимо. Допустим, программа прочитает файл S-Record mot и определит тип записи. Оттуда каждая строка записи, указанная в файле, будет разбита, как показано в примере ниже:
sample record line: "S214042000AABBCCDDEEFF01234567891A2B3C4D5EF9"
S2 - type w/c means there would be a 3-byte address
14 - record length
F9 - checksum
042000 - AA
042001 - BB
042002 - CC
042003 - DD
...
04200F - 5E
Я думаю или надеюсь, что с этим новым списком программе будет проще использовать данные в XML, чтобы найти их в mot-файле.
Скажите, будет ли это работать, или есть ли какие-либо альтернативы.