这是一个代码问题。您需要获取两个单独文件(i.txt和o.txt)的内容并交换它们。您可以创建第三个文件来帮助您完成该过程,但是在交换文件内容之后,让程序将其删除。现在再次允许重命名文件。
程序必须适用于任何文件内容。
最短的代码胜出,所有合格的提交将被投票。
inode
这儿的目标将是i.txt
的inode
包含从数据o.txt
的inode
,反之亦然,所以,如果有硬链接到那些inode
š其他地方,它们的内容将出现换为好。重命名无法实现这一点。
这是一个代码问题。您需要获取两个单独文件(i.txt和o.txt)的内容并交换它们。您可以创建第三个文件来帮助您完成该过程,但是在交换文件内容之后,让程序将其删除。现在再次允许重命名文件。
程序必须适用于任何文件内容。
最短的代码胜出,所有合格的提交将被投票。
inode
这儿的目标将是i.txt
的inode
包含从数据o.txt
的inode
,反之亦然,所以,如果有硬链接到那些inode
š其他地方,它们的内容将出现换为好。重命名无法实现这一点。
Answers:
import os;t='.txt';r,i,o,x=[os.rename,'i'+t,'o'+t,'1'+t];r(i,x);r(o,i);r(x,o)
import os;t='.txt'
for a,b in zip('iox','xio'):os.rename(a+t,b+t)
import os;t='.txt'
for a,b in 'ix','oi','xo':os.rename(a+t,b+t)
<?$r=rename;$t='.txt';$r("i$t","x");$r("o$t","i$t");$r("x","o$t");?>
move i.txt x&move o.txt i.txt&move x o.txt
move %1 x&move %2 %1&move x %2
$r=rename
为PHP函数创建别名。谢谢!
也许不是更短,但是我发现这很有趣(并且没有使用临时文件):
diff -u [io]*|tee >(patch -r -)|sed 1s/i/o/|patch -R
交换内容和修改文件的位置:
swapContent() { diff -u $1 $2|tee >(patch -r -)|sed 1s/$1/$2/|patch -R ;}
while read page file ;do man -Pcol\ -b $page >$file.txt;done <<<$'man i\nbash o'
printf "%s %8d %s\n" $(join -j 2 <(stat -c '%s %n' [io]*) <(md5sum [io]*))
swapContent [io]*
printf "%s %8d %s\n" $(join -j 2 <(stat -c '%s %n' [io]*) <(md5sum [io]*))
可能会产生类似:
i.txt 46007 1da1f7533e0eab1e97cce97bb7ca1d3b
o.txt 321071 7dcd230890faf4ef848d4745eda14407
patching file o.txt
i.txt 321071 7dcd230890faf4ef848d4745eda14407
o.txt 46007 1da1f7533e0eab1e97cce97bb7ca1d3b
mv
请求没那么有趣,但还是不错。
set -- {i,o}.txt t&&eval 'xargs -n2 mv<<<"' \${1,3,2,1,3,2} \"
patching file o.txt
出现。
哇!Ruby代码高尔夫!我认为以前从未尝试过!
但是,在所有现实中,这都需要一些不错的Ruby快捷方式和一些我发现的模式。这是我有史以来的第一次高尔夫,做起来很有趣。事不宜迟,以下是高尔夫球代码:
3.times{|x|x*=2;t=".txt";a=([?i,?a,?o]*2);File.rename(a[x]+t,a[x+1]+t)}
和非高尔夫版本
3.times do |x|
x = x * 2
t=".txt"
a=([?i,?a,?o]*2)
File.rename(a[x]+t, a[x+1]+t)}
end
关键因素在于,传递给的参数File.rename
正是这样的:
File.rename "i.txt", "a.txt"
File.rename "o.txt", "i.txt"
File.rename "a.txt", "o.txt"
希望这(没有)有道理!
$t='.txt'
ren i$t a$t -fo
ren o$t i$t
ren a$t o$t
其中ren
是Rename-Item的别名。该脚本使用并删除第三个文件a.txt
。
gc
默认值为UTF8NoBOM,但sc
默认值为ASCII。尝试一些UTF-8文件或二进制文件,您将看到它如何失败。
-e by -n
参数来确保文件不变。-readCount 0
向性能添加参数会很好。的脚本rename
较短:)已修复。
i1="i.txt"
i2="o.txt"
c1=IO.readlines(i2)
c2=IO.readlines(i1)
File.open(i1){|x|x.puts(c1)}
File.open(i2){|x|x.puts(c2)}
缩短版本:
a=["i.txt","o.txt"]
(0..1).each{|x|b[x]=IO.readlines(a[x])*"\n"}
a.reverse!
(0..1).each{|x|IO.write(a[x],b[x])}
不是最短的,但非常简单易读。另外,没有中间文件,只有RAM。
的PHP
$f1 = 'file1.txt';
$f2 = 'file2.txt';
$f1contents = file_get_contents ($f1);
$f2contents = file_get_contents ($f2);
file_put_contents($f1, $f2contents);
file_put_contents($f2, $f1contents);
type i.txt>a&type o.txt>i.txt&type a>o.txt&del a
我写这篇文章时忘记了move命令...
a
文件!
这是我在Groovy 2.2.1中的尝试。我尝试不重命名就这样做:
f={new File(it+".txt")}
w={x,y->x.withWriter{it.write y}}
i=f "i"
o=f "o"
t=i.text
w i,o.text
w o,t
取消高尔夫:
file = { new File(it+".txt") }
writeTextToFile = { x,y -> x.withWriter{it.write y} }
iFile = file("i")
oFile = file("o")
iText = iFile.text
writeTextToFile (iFile,oFile.text)
writeTextToFile (oFile,iText)
在c:\驱动器中使用临时文件t重命名。也是第一次尝试高尔夫:S
Sub s():Set f=CreateObject("Scripting.FileSystemObject"):i="c:\i.txt":t="c:\t":f.MoveFile i,t:f.MoveFile "c:\o.txt",i:Kill t:End Sub
如果已经引用了scrrun.dll,则可以将其减少到126 ... 110。
Sub s():Set f=new FileSystemObject:i="c:\i.txt":t="c:\t":f.MoveFile i,t:f.MoveFile "c:\o.txt",i:Kill t:End Sub
#define r(a,b)rename(#a".txt",#b".txt");
main(){r(i,)r(o,i)r(,o)}
用C语言完成的一个非常简单的解决方案。.txt
在为文件之一使用适当的新名称之前,它会使用一个临时名称()。
取消关注(请注意语法高亮显示在定义中如何失败,发现了一个错误!):
#include <stdio.h>
#define r(a, b) rename(#a ".txt", #b ".txt");
int main()
{
r(i, ) // rename("i.txt", ".txt");
r(o, i) // rename("o.txt", "i.txt");
r( , o) // rename( ".txt", "o.txt");
return 0;
}
use open IO,':bytes';undef$/;open I,"<i.txt";$I=<I>;open I,"<o.txt";open O,">i.txt";print O<I>;open O,">o.txt";print O$I
文件内容被存入内存并写回到另一个文件。因此i.txt
,o.txt
必须适合内存。
由于实际上交换了文件内容,因此硬链接会自动更新,请参见AJManfield的注释。
取消高尔夫:
use open IO => ':bytes'; # binmode, not needed for Unix, but needed for Windows
undef $/; # read whole file instead of lines
open I, "<i.txt"; # open i.txt for reading
$I = <I>; # read i.txt
open I, "<o.txt"; # open o.txt for reading
open O, ">i.txt"; # open i.txt for writing
print O <I>; # read o.txt and put the contents in i.txt
open O, ">o.txt"; # open o.txt for writing
print O $I; # write o.txt with contents of old i.txt
AsksAnyway的php进行了现代化和高尔夫化:
($r=rename)(i.$e=".txt",x);$r(o.$e,i.$e);$r(x,o.$e);
用运行php -nr '<code>'
。
set A [read [open i.txt]]
puts [set i [open i.txt w]] [read [open o.txt]]
puts [set o [open o.txt w]] $A
close $i
close $o
set A [read [set i [open i.txt r]]]
set B [read [set o [open o.txt r]]]
close $i
close $o
puts [set i [open i.txt w]] $B
puts [set o [open o.txt w]] $A
close $i
close $o