Witam.
Mam taki problem musze stworzyc program ktory bedzie pobieral pliki zmienial dany ciag znakow np: “ala ma kota” na inny np: “kot ma ale”
znalazlem komende na otworzenie pliku lecz proba dopisania czegololwiek zeszla na to ze podmienia caly plik na to co wpisalem.
Chce aby moj program znajdywal dowolny plik o danym rozszerzeniu np: “.txt” i zapisywal go z podmienionym tekstem na np: “txt2”
mysle ze musze najpierw dac komende ktora bedzie znajdowac wszystkie pliki we wszystkich folderach i zapisywal ich nazwy w tablicy.
nastepnie bedzie bral kazdy plik po kolei podmienial skladnie i zapisywal jako plik o tej samej nazwie tylko z innym rozszerzeniem.
No mozna i tak
Ale Ja mam aktualnie praktyki (jestem w technikum informatycznym)
i “praktykodawca” zlecil mi napisanie czegos takiego w ruby’m.
tak wiec mimo innych mozliwosci prosze o pomoc z ruby’m.
[quote]mysle ze musze najpierw dac komende ktora bedzie znajdowac wszystkie pliki we wszystkich folderach i zapisywal ich nazwy w tablicy.
nastepnie bedzie bral kazdy plik po kolei podmienial skladnie i zapisywal jako plik o tej samej nazwie tylko z innym rozszerzeniem.[/quote]
pomimo tego, że optymalizacja na poziomie tworzenia programu nie jest zbyt istotna, to po co robić dwa razy to samo? skoro już raz masz plik(chcesz go wpisywać do tablicy) to przecież możesz od razu na nim operować.
Ogólnie polecam zapoznać się z możliwościami klasy String
[quote=krzyzak][quote]mysle ze musze najpierw dac komende ktora bedzie znajdowac wszystkie pliki we wszystkich folderach i zapisywal ich nazwy w tablicy.
nastepnie bedzie bral kazdy plik po kolei podmienial skladnie i zapisywal jako plik o tej samej nazwie tylko z innym rozszerzeniem.[/quote]
pomimo tego, że optymalizacja na poziomie tworzenia programu nie jest zbyt istotna, to po co robić dwa razy to samo? skoro już raz masz plik(chcesz go wpisywać do tablicy) to przecież możesz od razu na nim operować.
Ogólnie polecam zapoznać się z możliwościami klasy String[/quote]
Sprobuje sie z tym zapoznac ale nie wiem jak mi to wyjdzie.
Ta strona nie uswiadomila mi nic albo nie potrafie dobrze wykorzystac tych komend albo nie wiem co.
O juz jest krok do przodu
Dir.glob(“a.txt”).each do |file|
content = IO.read(file).gsub(/()/, ‘tytul’)
File.open(file, “w”) do |f|
f << content
end
end
to jest ok ale nie dziala jak jest
Dir.glob(“a.txt”).each do |file|
content = IO.read(file).gsub(/()/, ’ ')
File.open(file, “w”) do |f|
f << content
end
end
przeszkadza ten / i co by teraz zrobic?
Edit: przepatrzylem to http://www.ruby-doc.org/core-1.8.7/classes/String.html i jedyne co teraz wiem to jak podmienic tekst z ta uwaga powyzej ^^.
Lecz dalej nie wiem jak automatycznie pobierac pliki po rozszerzeniach. Dalej musze nazwe pliku podawac recznie.
Jakis pomysl?
Tu masz kod, który w plikach zamienia 1. linijkę na początku. Może Ci się przyda
Dir["*.txt"].each do |filename|
file = File.open(filename,'r')
new_file = File.open('tmp','w')
file.each_with_index do |line,i|
if i==0
new_file << "Pierwsza linia\n"
else
new_file << line
end
end
file.close
new_file.close
File.rename("tmp",filename)
end
no jest super tylko mam jeden klopot. Moj program wyglada tak:
puts Dir[".txt"]
$wejscie = [’’, ‘’]
$wyjscie = [‘tytul’, ’ ']
for $i in 0…1
Dir.glob(".txt").each do |file|
content = IO.read(file).gsub($wejscie[$i].to_s, $wyjscie[$i].to_s)
File.open(file, “w”) do |f|
f << content
end
end
end
dziala bardzo fajnie z tym ze nie wiem jak podmienic cos gdzie skladnia ma jakas dowolnosc
zalozmy ze chce zamienic na tytul: oraz na tytul:
logicznie nalezalo by to zrobic <tytul*> na tytul: ale na stringach chyba tego nie zrobie wiec tu sie zaczynaja rybki
Hmmm… podstaw na pewno mi brakuje ale dopiero zaczynam sie uczyc takich rzeczy.
tak czytam o tym regexp i nie moze zrozumiec o co chodzi. Moze jakas podpowiedz?
Edit:
Tak sobie pomyslalem ze mozna by to zapisac jakos tak:
puts Dir[".txt"]
$wejscie = [’’, ‘’, "<title #${}>"]
$wyjscie = [‘tytul’, ’ ', ’ ']
for $i in 0…1
Dir.glob("*.txt").each do |file|
content = IO.read(file).gsub($wejscie[$i].to_s, $wyjscie[$i].to_s)
File.open(file, “w”) do |f|
f << content
end
end
end
Ale niestety tez nie dziala
edit: Ok wszystko mi calkiem fajnie dziala
Tylko jeszcze jedna rzecz czy da sie aby przeszukiwal wszystkie foldery w dol zamiast tylko tego w ktorym sie znajduje?
EDIT: Znalazlem komende ktora moze mi pomoc
konkretnie:
dir.entries(“nazwa 1 folderu”)
i wypisuje on pliki ktore szukam oraz nastepne foldery tylko klopot taki ze nie wiem jak to wykorzystac :<
puts Dir[’/*.txt’]
$wejscie = [’’, ‘’]
$wyjscie = [‘tytul.’, ’ ']
for $i in 0…1
Dir.glob("/*.txtl").each do |file|
content = IO.read(file).gsub($wejscie[$i].to_s, $wyjscie[$i].to_s)
File.open(file, “w”) do |f|
f << content
end
end
end
teraz mam klopot co do zmiany nazwy pliku po wszystkim
nie mam pojecia jak uzyc komendy File.rename
puts Dir[’/*.txt’]
$wejscie = [’’, ‘’]
$wyjscie = [‘tytul.’, ’ ']
for $i in 0…1
Dir.glob("/*.txt").each do |file|
content = IO.read(file).gsub($wejscie[$i].to_s, $wyjscie[$i].to_s)
File.open(file, “w”) do |f|
f << content
end
name=File.basename(file, “.txt”)
File.rename(file,"#{name}.txt2")
end
end
Wszystko pieknie fajnie ale czemu on mi nie zmienia nazw plikow w folderach ktore byly tylko wszystko mi przenosi do folderu z programem?
Jest na to jakas rada?