我参加了Code Golf比赛之一,其中文件越小越好。从代码文件中删除所有空格的最简单方法是什么?
而不是手动删除所有空白,等等,我正在寻找一个程序或网站,该网站将采取文件,删除所有空白(包括新行),并返回该文件的压缩版本。有任何想法吗?
我参加了Code Golf比赛之一,其中文件越小越好。从代码文件中删除所有空格的最简单方法是什么?
而不是手动删除所有空白,等等,我正在寻找一个程序或网站,该网站将采取文件,删除所有空白(包括新行),并返回该文件的压缩版本。有任何想法吗?
你可以使用:
sed 's/\s\s+/ /g' youfile > yourpackedfile`
你甚至可以做到这一点在PHP(如何奇妙的是生命):
$data = file_get_contents('foobar.php');
$data = preg_replace('/\s\s+/', ' ', $data);
file_put_contents('foobar2.php', $data);
你要注意,这不会照顾像$bar = ' asd aa a';
一个字符串变量取决于你这可能是一个问题是做。在线工具似乎可以正确处理这个问题。
在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++}
天真地应用上述语句时,你不需要分号。它既改变了程序的含义和语法正确性。很可惜,在数字高尔夫解决方案中不需要太多注意,但是线条连接在一起的问题仍然存在,遗憾的是。只是在每一行之间加上分号实际上也没有帮助。
$ tr -d ' \n' <oldfile >newfile
如果你的代码编辑器的程序支持regular expressions,你可以试试这个:
Find this: [\r\n]{2,}
Replace with this: \n
Then Replace All
Notepad++是一个相当不错的编辑器,如果你使用的是Windows,并且它有很多预定义宏,修剪下来编码并删除其中的空白。
它可以做正则表达式,并有大量的功能来帮助代码黑客或脚本小子。
运行php -w
就可以了!
php -w myfile.php
与正则表达式不同,这足以让字符串保持独立,并且它也会删除注释。
这是一个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));
这取决于你的语言,但'sed'可以做到,如果你只想删除空间 – RageZ 2009-11-19 08:07:33
我使用PHP和使用Windows进行开发,我希望它能够删除whitepsace以及新行 – 2009-11-19 08:10:26
Linux:rm文件Windows:del文件。所有空白删除(其他一些字符也是,但它说你不得不保留它们) – 2009-11-19 09:00:04