Cvičím Ruby a snažím sa kopírovať obsah zo súboru „zo“ do súboru “do“. môžete mi povedať, kde som to urobil zle?
Vďaka !
from = "1.txt"
to = "2.txt"
data = open(from).read
out = open(to, "w")
out.write(data)
out.close
data.close
odpovede:
1 pre odpoveď č. 1Možno mi chýba bod, ale myslím si, že písanie tak je viac „rubínové“
from = "1.txt"
to = "2.txt"
contents = File.open(from, "r").read
File.open(to, "w").write(contents)
Osobne by som však rád použil terminál operačných systémov na vykonávanie operácií so súbormi. Tu je príklad na Linuxe.
from = "1.txt"
to = "2.txt"
system("cp #{from} #{to}")
A pre Windows verím, že by ste použili ..
from = "1.txt"
to = "2.txt"
system("copy #{from} #{to}")
Nakoniec, ak by ste potrebovali výstup z nejakého záznamu alebo z iného dôvodu, použil by som backticks.
#A nice one liner
`cp 1.txt 2.txt`
Tu je dokumentácia o systéme a metódach backtick. http://ruby-doc.org/core-1.9.3/Kernel.html
1 pre odpoveď č. 2
Nemôžete hrať data.close
- data.class
by ti ukázal, že máš String
, a .close
nie je platný String
metóda. Otvorením from
spôsobom, ako ste sa rozhodli, ste stratili File
odkaz po použití s vaším read
. Jedným zo spôsobov, ako to vyriešiť, by bolo:
from = "1.txt"
to = "2.txt"
infile = open(from) # Retain the File reference
data = infile.read # Use it to do the read
out = open(to, "w")
out.write(data)
out.close
infile.close # And finally, close it