Potrzebuję odczytać dane z bazy danych, a następnie zapisać je w pliku tekstowym.Jak pisać do pliku w Ruby?
Jak mogę to zrobić w Ruby? Czy istnieje jakiś system zarządzania plikami w Ruby?
Potrzebuję odczytać dane z bazy danych, a następnie zapisać je w pliku tekstowym.Jak pisać do pliku w Ruby?
Jak mogę to zrobić w Ruby? Czy istnieje jakiś system zarządzania plikami w Ruby?
Ruby File class daje tajniki ::new
i ::open
ale jego rodzica, IO class, dostaje się do głębokości #read
i #write
.
Szukasz następujących produktów?
File.open(yourfile, 'w') { |file| file.write("your text") }
Jest to korzystne podejście w większości przypadków:
File.open(yourfile, 'w') { |file| file.write("your text") }
Kiedy blok jest przekazywana do File.open
, obiekt File zostanie automatycznie zamknięte, gdy blok kończy.
Jeśli nie przekazujesz bloku do File.open
, musisz upewnić się, że plik jest poprawnie zamknięty, a zawartość została zapisana do pliku.
begin
file = File.open("/tmp/some_file", "w")
file.write("your text")
rescue IOError => e
#some error occur, dir not writable etc.
ensure
file.close unless file.nil?
end
Można go znaleźć w documentation:
static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
VALUE io = rb_class_new_instance(argc, argv, klass);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, io, io_close, io);
}
return io;
}
Tak, używając składni bloków z {| file | ....} zamknie plik, gdy blok się zamknie. – wesgarrison
Fajnie, dzięki. Nie byłem tego pewien. Oto kilka informacji o blokach i 'File.open' http://blog.rubybestpractices.com/posts/rklemme/001-Using_blocks_for_Robustness.html jest również wspomniany w oficjalnej dokumentacji – Tombart
Po prostu coś w stylu ruby: zero jest obiektem, więc aby sprawdzić, czy plik jest pusty, pytasz sam obiekt zamiast porównywać (plik.nil? zamiast pliku == zero) – JCabello
Zambri „s odpowiedź found here jest najlepszy.
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
gdzie opcje <OPTION>
są:
r
- Tylko do odczytu. Plik musi istnieć.
w
- Utwórz pusty plik do zapisu.
a
- Dołącz do pliku. Plik jest tworzony, jeśli nie istnieje.
r+
- Otwórz plik, aby zaktualizować odczyt i zapis. Plik musi istnieć.
w+
- Utwórz pusty plik zarówno do odczytu, jak i zapisu.
a+
- Otwórz plik do czytania i dołączania. Plik zostanie utworzony, jeśli nie istnieje.
W twoim przypadku preferujemy w
.
Można używać skróconej wersji:
File.write('/path/to/file', 'Some glorious content')
Zwraca długość pisemnej; patrz ::write, aby uzyskać więcej informacji i opcji.
FYI ta skrócona metoda działa tylko zaczynając od Ruby 1.9.3. Nie ma takiej metody we wcześniejszych wersjach wersji 1.9 lub 1.8. W takim przypadku musisz użyć metody dłuższego bloku opublikowanej przez @mvndaai –
FYI, to właściwie zamknie plik po zakończeniu. –
[Dokumenty z klasy IO] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-c-write) mówią, że zamyka plik – nruth
Dla tych z nas, którzy uczą się przez przykład ...
Wpisywanie tekstu do pliku jak poniżej:
IO.write('/tmp/msg.txt', 'hi')
BONUS INFO ...
Przeczytaj go z powrotem jak to
IO.read('/tmp/msg.txt')
Często Chcę odczytać plik do mojego schowek ***
Clipboard.copy IO.read('/tmp/msg.txt')
, a innym razem, chcę napisać, co jest w moim schowku do pliku ***
IO.write('/tmp/msg.txt', Clipboard.paste)
*** Zakłada masz gem schowka zainstalowany
Uważaj na opcję 'IO.write' ** nadpisuj ** zawartość pliku zamiast dopisz. Dołączanie do IO.write jest nieco nudne. – fguillen
Nie jesteś pewien, o czym mówisz? Polecenie IO.write nie potrzebuje tej opcji do zapisu do pliku. Byłbym ostrożny, aby zapisać plik w katalogu/tmp lub w bieżącym katalogu; W przeciwnym razie może pojawić się komunikat 'Errno :: ENOENT: No such file lub directory @ rb_sysopen' i plik utworzony z rozmiarem 0 bajtów. – l3x
zniszczyć poprzednia zawartość pliku, a następnie napisać nowy ciąg do pliku:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
dołączyć do pliku bez zastępowania swoich starych zawartość:
open('myfile.txt', "a") { |f| f << 'I am appended string' }
Dzięki @Geoff. Dobrze jest widzieć nowych użytkowników czyszczących przestarzałe pytania i odpowiedzi. Tworzy lepszą stronę ogólnie. – jdl
Uważam to za ironiczne. Odpowiedź jest bardzo dobrze udokumentowana ... ale teraz, rok później, to pytanie jest pierwszym hitem w Google. Kiedy zadano pytanie, mogło się wydawać, że OP poświęca mało uwagi, ale teraz, jeśli chodzi o Google, jest to najlepsze źródło. – Jeff
Prawdopodobnie dlatego, że wszystko, co naprawdę potrzebujesz wiedzieć, jest tutaj. Mój jest odpowiedzią "naucz mężczyznę łowić ryby" dla tych, którzy chcą czytać najdrobniejsze szczegóły, i jest mnóstwo odpowiedzi "daj człowiekowi ryby" także dla osób, które chcą tylko wycinać i wklejać. Nic dziwnego, że ta kombinacja kończy się dobrze w rankingu w Google. – jdl