Я пытаюсь прочитать данные из простого текстового файла по рецепту промышленной машины. Файл генерируется инструментом автоматически. Я хочу получить доступ к определенному параметру в определенном разделе файла.
Параметр называется «LightSrcRef_NominalGL». Проблема в том, что в файле есть несколько параметров, названных таковыми. Я специально хочу первый и единственный, который появляется после тега "[Scan2d]"
Обратите внимание, что нужный мне параметр не всегда отображается на одном и том же номере строки и [Scan2d] не всегда отображается в одном и том же месте, но мне нужен параметр в разделе Scan2d. Также представляется, что параметр LightSrcRef_NominalGL не всегда совпадает с количеством строк после [Scan2d].
Я надеялся прочитать файл построчно. Когда я добираюсь до [Scan2d], устанавливаю флаг, затем, когда я добираюсь до параметра, устанавливаю мою переменную, затем выхожу.
Этого не происходит. Вместо этого он берет первый LightSrcRef_NominalGL в файле.
У нас есть похожие анализаторы рецептов, но это первый анализатор с такой уникальной структурой рецептов. Я искал способ прочитать файл по-другому, но ни один из них не дал других результатов.
Когда я печатаю фактическую строку, это показывает, что текстовый файл читает его построчно. Я не понимаю, почему он ведет себя не так, как ожидалось.
Вот пример текстового файла. В этом случае это в конце файла. В других будет другой раздел после. Мне пришлось добавить дополнительный возврат каретки в текстовом файле, потому что это не отображало их в виде отдельных строк. Они читаются в строках, потому что если у меня есть print $ line, он показывает ровно одну строку.
[Scan2d]
CameraTypeName = 2D
FocusPosAboveChuck = -2,59084174217116
Mag = 5
CameraName = HighMag
DifRingPos = 2
* * Гамма тысяча двадцать восемь = -1
LightSrcDif_ColorFilter = Gray
LightSrcDif_NominalGL = 0
LightSrcRef_ColorFilter = Cyan
LightSrcRef_NominalGL = 195,424629214628
$catcher = 0; //used to verify the parameter only in scan2d section
$lines = file($dir.$default_directory."/".$current_recipe_file);
foreach($lines as $line)
{ $line_count ++;
if(preg_match("/[Scan2d]\b/i", $line))
{
$catcher = $line_count; //used to only catch the parameter in the Scan2D section
}
if(preg_match("/\bLightSrcRef_NominalGL=\b/i", $line))
{
$illumination_split_temp1 = preg_split("/\=/", $line);
$recipe_illum = $illumination_split_temp1[1];
if ($catcher >0)
{print $line . " ". $catcher . "<br>";
$Tool_Ins150_Stats->Add_Recipe_Tag("Illumination Level", $recipe_illum);
$catcher= 0;
break;
}
}
}
Он берет первый LightSrcRef_NominalGL в файле, а не тот, что после Scan2d.