Ruby wykorzystanie plikow

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.

Jakies pomysly jak to napisac?

Z gory dzieki za pomoc.

ech :stuck_out_tongue:

wget |cat | sed | ...

Po co ci tam ruby?

No mozna i tak :slight_smile:
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

http://www.techotopia.com/index.php/Working_with_Files_in_Ruby

[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. :slight_smile:

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?

Dir["*.rb"] => ["ability.rb", "authentication.rb", "comment.rb", ...]

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

wie ktos jak to ruszyc?

regexp, wyrażenia regularne. Ech brakuje ci trochę podstaw z programowania, poczytaj o regexp ogólnie, dla ruby, pobaw się
narzędziami online

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

Wklep obejrzyj przykłady, pobaw się

jakaś podopowiedź,

[0-9] dopasowuje liczbe

    • dowolna ilość
  • przynajmniej jedna
    ? zero, jedna

Jest to wszystk opisane wklep kilka przykładów, napis redexp który to wyłapie, i tyle

PS
co to za dolary w zmiennych? to nie php.

Pomoc:
<title(.*)>
wyłapie ci wszystko co jest po title a przed > i podstawi pod zmienną $1
Tylko uważaj bo np

> wyłapie ci do ostatniego >, no ale punkt zaczepienia masz ;]

dolary aby ustawic zmienne globalne :slight_smile:

edit: Ok wszystko mi calkiem fajnie dziala :slight_smile:
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 :<

p Dir[’**/.’]

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

http://www.ruby-doc.org/core/classes/File.html#M000019

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?

podać scieżkę naprzykład.

Nie pomyslalem a faktycznie trudne to nie bylo :slight_smile:
a co jesli mam cos takiego:
a chce to zamienic na : ikona:“icon-info.png”?

<(\w+) src="(\w|-|.+)"/>

i wtedy w $1 masz iconi…
a w $2 nazwę

Masz link do rubulara, to nie boli pouczyc sie czegos