2009-11-19 53 views
2

我参加了Code Golf比赛之一,其中文件越小越好。从代码文件中删除所有空格的最简单方法是什么?

而不是手动删除所有空白,等等,我正在寻找一个程序或网站,该网站将采取文件,删除所有空白(包括新行),并返回该文件的压缩版本。有任何想法吗?

+0

这取决于你的语言,但'sed'可以做到,如果你只想删除空间 – RageZ 2009-11-19 08:07:33

+0

我使用PHP和使用Windows进行开发,我希望它能够删除whitepsace以及新行 – 2009-11-19 08:10:26

+1

Linux:rm文件Windows:del文件。所有空白删除(其他一些字符也是,但它说你不得不保留它们) – 2009-11-19 09:00:04

回答

7

你可以使用:

sed 's/\s\s+/ /g' youfile > yourpackedfile` 

还有this online tool

你甚至可以做到这一点在PHP(如何奇妙的是生命):

$data = file_get_contents('foobar.php'); 
$data = preg_replace('/\s\s+/', ' ', $data); 
file_put_contents('foobar2.php', $data); 

你要注意,这不会照顾像$bar = ' asd aa a';一个字符串变量取决于你这可能是一个问题是做。在线工具似乎可以正确处理这个问题。

+0

很棒,在线工具很棒 – 2009-11-19 08:12:53

+0

@Click Upvote:太棒了! – RageZ 2009-11-19 08:15:04

+0

我比较喜欢'/ \ s {2,} /'。我很惊讶PHP代码缩小器存在......大部分时间没有意义;它是服务器端。 – mpen 2009-11-19 09:00:34

1

在PowerShell中(V2)这可以用下面的小片段来完成:

(-join(gc my_file))-replace"\s" 

或更长的时间:

(-join (Get-Content my_file)) -replace "\s" 

它将加入所有的行在一起并删除所有空格和制表符。

但是,对于某些语言,您可能不希望这样做。在PowerShell中,例如,除非你把多个语句放在一行代码,所以像

while (1) { 
    "Hello World" 
    $x++ 
} 

将成为

while(1){"HelloWorld"$x++} 

天真地应用上述语句时,你不需要分号。它既改变了程序的含义和语法正确性。很可惜,在数字高尔夫解决方案中不需要太多注意,但是线条连接在一起的问题仍然存在,遗憾的是。只是在每一行之间加上分号实际上也没有帮助。

2
$ tr -d ' \n' <oldfile >newfile 
0

如果你的代码编辑器的程序支持regular expressions,你可以试试这个:

Find this: [\r\n]{2,} 
Replace with this: \n 
Then Replace All 
0

Notepad++是一个相当不错的编辑器,如果你使用的是Windows,并且它有很多预定义宏,修剪下来编码并删除其中的空白。

它可以做正则表达式,并有大量的功能来帮助代码黑客或脚本小子。

Notepad++ website

0

运行php -w就可以了!

php -w myfile.php 

与正则表达式不同,这足以让字符串保持独立,并且它也会删除注释。

0

这是一个PHP函数,将做的工作适合你:

function compress_php_src($src) { 

    // Whitespaces left and right from this signs can be ignored 
    static $IW = array(
     T_CONCAT_EQUAL,    // .= 
     T_DOUBLE_ARROW,    // => 
     T_BOOLEAN_AND,    // && 
     T_BOOLEAN_OR,    // || 
     T_IS_EQUAL,     // == 
     T_IS_NOT_EQUAL,    // != or <> 
     T_IS_SMALLER_OR_EQUAL,  // <= 
     T_IS_GREATER_OR_EQUAL,  // >= 
     T_INC,      // ++ 
     T_DEC,      // -- 
     T_PLUS_EQUAL,    // += 
     T_MINUS_EQUAL,    // -= 
     T_MUL_EQUAL,    // *= 
     T_DIV_EQUAL,    // /= 
     T_IS_IDENTICAL,    // === 
     T_IS_NOT_IDENTICAL,   // !== 
     T_DOUBLE_COLON,    // :: 
     T_PAAMAYIM_NEKUDOTAYIM,  // :: 
     T_OBJECT_OPERATOR,   // -> 
     T_DOLLAR_OPEN_CURLY_BRACES, // ${ 
     T_AND_EQUAL,    // &= 
     T_MOD_EQUAL,    // %= 
     T_XOR_EQUAL,    // ^= 
     T_OR_EQUAL,     // |= 
     T_SL,      // << 
     T_SR,      // >> 
     T_SL_EQUAL,     // <<= 
     T_SR_EQUAL,     // >>= 
    ); 

    if(is_file($src)) { 
     if(!$src = file_get_contents($src)) { 
      return false; 
     } 
    } 

    $tokens = token_get_all($src); 

    $new = ""; 
    $c = sizeof($tokens); 
    $iw = false; // Ignore whitespace 
    $ih = false; // In HEREDOC 
    $ls = ""; // Last sign 
    $ot = null; // Open tag 
    for($i = 0; $i < $c; $i++) { 
     $token = $tokens[$i]; 

     if(is_array($token)) { 
      list($tn, $ts) = $token; // tokens: number, string, line 
      $tname = token_name($tn); 

      if($tn == T_INLINE_HTML) { 
       $new .= $ts; 
       $iw = false; 
      } 
      else { 
       if($tn == T_OPEN_TAG) { 

        if(strpos($ts, " ") || strpos($ts, "\n") || strpos($ts, "\t") || strpos($ts, "\r")) { 
         $ts = rtrim($ts); 
        } 

        $ts .= " "; 
        $new .= $ts; 
        $ot = T_OPEN_TAG; 
        $iw = true; 

       } elseif($tn == T_OPEN_TAG_WITH_ECHO) { 

        $new .= $ts; 
        $ot = T_OPEN_TAG_WITH_ECHO; 
        $iw = true; 

       } elseif($tn == T_CLOSE_TAG) { 

        if($ot == T_OPEN_TAG_WITH_ECHO) { 
         $new = rtrim($new, "; "); 
        } else { 
         $ts = " ".$ts; 
        } 
        $new .= $ts; 
        $ot = null; 
        $iw = false; 

       } elseif(in_array($tn, $IW)) { 

        $new .= $ts; 
        $iw = true; 

       } elseif($tn == T_CONSTANT_ENCAPSED_STRING 
         || $tn == T_ENCAPSED_AND_WHITESPACE) 
       { 

        if($ts[0] == '"') { 
         $ts = addcslashes($ts, "\n\t\r"); 
        } 
        $new .= $ts; 
        $iw = true; 

       } elseif($tn == T_WHITESPACE) { 

        $nt = @$tokens[$i+1]; 
        if(!$iw && (!is_string($nt) || $nt == '$') && !in_array($nt[0], $IW)) { 
         $new .= " "; 
        } 
        $iw = false; 

       } elseif($tn == T_START_HEREDOC) { 

        $new .= "<<<S\n"; 
        $iw = false; 
        $ih = true; // in HEREDOC 

       } elseif($tn == T_END_HEREDOC) { 

        $new .= "S;"; 
        $iw = true; 
        $ih = false; // in HEREDOC 
        for($j = $i+1; $j < $c; $j++) { 
         if(is_string($tokens[$j]) && $tokens[$j] == ";") { 
          $i = $j; 
          break; 
         } else if($tokens[$j][0] == T_CLOSE_TAG) { 
          break; 
         } 
        } 

       } elseif($tn == T_COMMENT || $tn == T_DOC_COMMENT) { 

        $iw = true; 

       } else { 

        if(!$ih) { 
         $ts = strtolower($ts); 
        } 
        $new .= $ts; 
        $iw = false; 
       } 
      } 
      $ls = ""; 

     } 
     else { 
      if(($token != ";" && $token != ":") || $ls != $token) { 
       $new .= $token; 
       $ls = $token; 
      } 
      $iw = true; 
     } 
    } 
    return $new; 
} 
// This is an example 
$src = file_get_contents('foobar.php'); 
file_put_contents('foobar3.php',compress_php_src($src)); 
相关问题