【问题标题】:Removing what ever string of word or words come after a special char █ on a single line删除单行特殊字符 █ 之后的任何单词或单词字符串
【发布时间】:2011-03-29 21:47:36
【问题描述】:

我有一个源文件,该文件包含要翻译的字符串。翻译缓存文件的每一行包含一个Source string,然后是分隔符/分隔符,然后是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++;
        }
      }
    }

【问题讨论】:

    标签: php arrays string delimiter


    【解决方案1】:

    在检查是否将行添加到$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 != '')

    【讨论】:

    • thanks 看起来很有希望,但我不明白,或者你是非常天才,两者之一:) 请解释你的插件&& ($value != '') 如何解决if the right part of the █ is empty 然后remove that entire line?谢谢
    • @Sam,查看内部 for 循环,第一行 list($key, $value) = explode($translation_key_value_separator, $key_value); 将该行分成两部分 $key(分隔符之前的部分)和 $value(分隔符之后的部分) .在接下来的几行代码中,检查该行是否应该添加到$clean_file$removed。如果分隔符的右侧部分为空,则添加条件 ($value != '') 会删除该行。
    • BINGOOOOO 现在我明白了! (之前我没有)因此我是 JIPPIIEEEE 非常感谢队友!
    【解决方案2】:
    $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); 获取字符串而不是数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2018-04-24
      • 2019-09-11
      相关资源
      最近更新 更多