У меня есть текстовый файл (это действительно файл Intel Hex, но данные ASCII-текст), и я не смог найти способ найти начальную и конечную строки нуля данные.Найти строки данных в текстовом файле
Файл начинается с строк данных, а затем может иметь несколько строк, которые равны нулю, а затем данные снова. Я пытаюсь найти местоположение последней группы нулей.
В качестве примера файл может содержать следующее:
:1234567890
:0987654321
:0000000000
:0000000000
:ABCDEFABCD
:DCBAFEDCBA
:0000000000
:0000000000
:0000000000
:9999999999
Для этого файла я хочу вернуть строку # 7 в качестве исходного ряда и ряд # 9 в финале ряда.
настоящее время я использую StreamReader и ReadLine так:
StreamReader srHexFile = File.OpenText(m_pathHexFile);
while ((readData = srHexFile.ReadLine()) != null)
....
Но у меня ментальный блок на лучшем способе проходных и установить/сбросить начальные и конечные строки.
Заранее благодарим за любую помощь!
на основе предложения от @ user993533 я работаю со следующей функцией, но он возвращался 2881 для firstZeroRow, где он должен быть 2883.
Вот новый код:
private int FindEndofFlashData()
{
int lineNumber = 0;
String readData;
String zeroRowData = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
int firstZeroRow = -1; // Will hold the location that starts the zero data
//int lastZeroRow = m_numberOfFlashRows - 2; // We know where to stop looking from m_numberOfFlashRows
int lastZeroRow = -1;
bool groupEnded = true;
StreamReader srHexFile = File.OpenText(m_pathHexFile);
/* Loop till the main flash row data ends, which will be used to calculate the number of lines in hex file for
* flash rows. Each line of hex file will have data for 1/2 th of a Flash row (64 bytes)*/
while (((readData = srHexFile.ReadLine()) != null) && (lineNumber < (m_numberOfFlashRows*4 - 4)))
{
if ((readData[HEX_FILE_RECORD_TYPE_CHAR_0_INDEX] == HEX_FILE_DATA_RECORD_CHAR_0) && (readData[HEX_FILE_RECORD_TYPE_CHAR_1_INDEX] == HEX_FILE_DATA_RECORD_CHAR_1))
{
lineNumber++;
if (readData.Substring(9, 128) == zeroRowData)
{
if(groupEnded)
{
firstZeroRow = lineNumber;
groupEnded = false;
}
lastZeroRow = lineNumber;
}
else
{
groupEnded = true;
}
}
else
{
if ((readData[HEX_FILE_RECORD_TYPE_CHAR_0_INDEX] == HEX_FILE_EXTEND_LINEAR_RECORD_CHAR_0) &&
(readData[HEX_FILE_RECORD_TYPE_CHAR_1_INDEX] == HEX_FILE_EXTEND_LINEAR_RECORD_CHAR_1))
{
if (readData[HEX_FILE_EXTENDED_ADDR_CHAR_1_INDEX] >= HEX_FILE_EXTENDED_ADDR_NON_FLASH_REGION)
{
break;
}
}
}
}
Console.WriteLine("First Zero Row is: {0}", firstZeroRow);
Console.WriteLine("Last Zero Row is: {0}", lastZeroRow);
return (firstZeroRow);
}
ну, петли у вас уже есть, что у вас проблемы со следующим? –