Удаление строки слова или слов после специального символа █ в одной строке - PullRequest
0 голосов
/ 30 марта 2011

У меня есть исходный файл, который содержит переводимые строки. Каждая строка файлов кэша перевода содержит Source string, затем разделитель / separatpr , затем translated string

Оригинальный старый автор написал хороший скрипт очистки, который очищает файлы кэша от дубликатов или удаляет целые строки из кэша, если старый источник больше их не использовал.

Теперь я хотел бы добавить еще одну функцию в этот существующий код (соответствующая часть ниже), а именно: удалить всю строку, когда абсолютно нет ничего '' после ключа разделения для той же строки, что его рассмотрение.

У меня такое чувство, что где-то внизу будет 1 строка кода. Но где эта линия выглядит? Ваша помощь очень ценится. Заранее большое спасибо.

ФАЙЛ С ТЕКУЩИМ КЕШОМ:

Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
Zorro in zeppelin from zimbabwe█
Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
Water wave with whistling whale█

ФАЙЛ МОЕЙ ЦЕЛИ:

Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla

СУЩЕСТВУЮЩИЙ КОД:

$translation_key_value_separator = '█';

// Read file contents and create a used keys array
$used_keys = array();
get_used_keys($dir_to_clean, &$used_keys);

// Cleanup translations: removes an entire line from the translation cache file 
// if the LEFT part of the █ is not existend (anymore) in the source files.
$removed = array();
$counter = 0;
foreach (glob($dir_translation_files . "/*.$translation_ext") as $filepath) {
    $filename = get_filename($filepath);
    $key_values = explode("\n", file_get_contents($filepath));
    $clean_file = array();
    foreach($key_values as $key_value){
      list($key, $value) = explode($translation_key_value_separator, $key_value);
      if($key != ''){
        if(in_array($key, $used_keys)){
            $clean_file[] = $key . $translation_key_value_separator . $value;
        }else{
            $removed[$filename][] = $key;
            $counter++;
        }
      }
    }

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

Похоже, вам нужно добавить еще одно условие при проверке, добавлять ли строку в $clean_file или $removed.Пожалуйста, смотрите часть, которую я извлек ниже:

if ($key != '') {
    if (in_array($key, $used_keys) && ($value != '')) {
        $clean_file[] = $key . $translation_key_value_separator . $value;
    } else {
        $removed[$filename][] = $key;
        $counter++;
    }
}

, где дополнительное условие ($value != '').

1 голос
/ 30 марта 2011
$cache = "Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
Zorro in zeppelin from zimbabwe█
Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
Water wave with whistling whale█"; 

$lines = explode("\n", $cache);
foreach($lines as $line){
    $x = explode("█", $line);
    if(!empty($x[1])) $new[] = $line;
}

print_r($new);

Результат:

Array
(
    [0] => Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
    [1] => Bla blaaaa bla blaa blaaaaa bla█Bla blaaaa bla blaa blaaaaa bla
)

Вы можете $new = implode("\n", $new); получить строку вместо массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...