Как отразить апострофный текст файла в переполнении стека

Я хочу, чтобы diff 2 файла и игнорировать проверку строк, которые не имеют апостроф («текст») в PHP

Например:
Файл 1:

START
LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT

Файл 2:

/*
*    Translated by Saibamen
*
/

START
LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT

Я хочу проверить, есть ли разница между версией инструмента: и Wersja narzędzia: строки.

Примечание: файлы не имеют одинаковые схемы построчно — я хочу начать разностные строки со строки, которые имеют START в файле.

-1

Решение

Вы должны сначала получить содержимое каждого файла, а затем использовать preg_match Функция с правильным шаблоном, чтобы найти строку версии и строку версии.

$fileContent1 = <<<TXT
dummy
dummy
LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT


dummy
TXT;

$fileContent2 = <<<TXT
dummy
LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT
dummy
dummy

TXT;

function diff_versions($leftContent, $rightContent) {
$diff = true;
$leftVersion = null;
$rightVersion = null;

$pattern = '/LTEXT "(Tool Version|Wersja narzędzia):", (.*)\R?/';

if (preg_match($pattern, $leftContent, $matches) !== 1) {
throw new Exception('Left content has no version line.');
}

$leftVersion = $matches[2];

if (preg_match($pattern, $rightContent, $matches) !== 1) {
throw new Exception('Right content has no version line.');
}

$rightVersion = $matches[2];

return array(
'diff' => $leftVersion === $rightVersion,
'leftVersion' => $leftVersion,
'rightVersion' => $rightVersion,
);
}

var_dump(diff_versions($fileContent1, $fileContent2));

Выход:

array (size=3)
'diff' => boolean true
'leftVersion' => string 'IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT' (length=89)
'rightVersion' => string 'IDC_STATIC, 70, 150, 80, 10, SS_RIGHT EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT' (length=89)

И тогда вы должны различать версии, как вам нравится.

1

Другие решения

Может быть, это даст смысл начать с:

$str1 = 'LTEXT "Tool Version:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT';

$str2 = 'LTEXT "Wersja narzędzia:", IDC_STATIC, 70, 150, 80, 10, SS_RIGHT
EDITTEXT IDC_STATIC_TIME, 155, 50, 210, 10, ES_LEFT';

$shortStr1 = substr($str1, 23);
$shortStr2 = substr($str2, 28);

echo "\n";
echo substr_compare($shortStr1, $shortStr2, 0, strlen($shortStr1));
echo "\n";
echo substr_compare($shortStr2, $shortStr1, 0, strlen($shortStr2));
  • Два сравнения, если строки не одинакового размера
  • Вернет 0 если такой же
  • Вернет 1, если не то же самое
  • Для лучшего теста вы должны проверить через preg_match () а также pre_match_all ()

Я думаю, что это — или, по крайней мере, идея — приведет вас к ответу.
В следующий раз предоставьте больше информации и того, что вы уже попробовали, и многие здесь даже предоставят полные решения!
Но для этого нужно показать, что ты уже получил и уже попробовал. Никто не хочет выполнять работу, за которую вам платят, но многие здесь готовы помочь вам, если у вас возникнут проблемы а также достаточно старался!

0

По вопросам рекламы [email protected]