Ruby wykorzystanie plikow

test.rb:10:in gsub': can't convert nil into String (TypeError) from test.rb:10:inblock (2 levels) in ’
from test.rb:8:in each' from test.rb:8:inblock in ’
from test.rb:7:in each' from test.rb:7:in

F:\testing folder>

da sie jakos zapobiedz tym bledzikom? :slight_smile: troche denerwuja ale program z nimi tez dziala :slight_smile:

Pokaż plik test.rb, nalepiej użyj tu na forum tagu code. Twój post będzie wtedy ładnie sformatowany: http://rubyonrails.pl/forum/help.php#bbcode
Np tak:

kod_wyglada_ladnie if jest_w_tagu_code?

[code]puts Dir[’**/*.xml’]

wypisuje wszystkie pliki na ktorych dziala.

$wejscie = [//, /</title>/, /<section.*>/, /<item/>/, //, /</itemize>/]

tablica znacznikow ktore maja byc zamieniane

$wyjscie = [’ == ', ’ == ‘, ’ ’ ,’ ', ’ ‘,’ ']

tablica znacznikow docelowych

for $i in 0…7
Dir.glob("**/*.xml").each do |file|
#pobieranie plikow do zamiany kodu
content = IO.read(file).gsub($wejscie[$i], $wyjscie[$i])
File.open(file, “w”) do |f|
f << content
# zamiana kodu z zapisaniem go
end
#miejsce=File.dirname(file)
#name=File.basename(file, “.xml”)
#File.rename(file,"#{miejsce}/#{name}.textile")
end
end[/code]
prosze :slight_smile:
i dlaczego taki blad wychodzi?

begin Dir.glob("**/*.xml").each do |file| while (line = file.gets) #zacznij od takiej zmiany, tu w zmiennej line masz aktualna linie #na niej robisz gsub line.gsub unless costam.nil? end file.close end rescue => err puts "Exception: #{err}" err end
Mniej więcej, nie testowane wiec musisz pokombinowac

Sprawdź wartość $i - tablica $wyjscie ma o jedną wartość za mało. Poza tym używanie zmiennych globalnych jest BE. :wink:

wczesniej nie mialem globalnych to mi nic nie chodzilo :stuck_out_tongue:

teraz mam zagwostke odnosnie tych plikow obrazkowych

a ja potrzebuje miec [[Plik:en-opi.png]] :<

hmm to mam klopot wpis/uje

<figure src="(.*)".*>/

chce suzyskac tylko
en-opi.png a lapie mi en-opi.png" witdth=“1” refsize="page

jak by temu zaradzic

a druga sprawa to jak w regexp zapisac ze chce tylko puste znaki takie jak spacje i taby ale tylko te ktore sa na poczatku lini do pierwszego dowolnego znaku?

Mniej więcej coś takiego:

/<figure src="([^"]*)"[^>]*>/

albo podejście z operatorem niezachłannym

/<figure src="(.*?)".*?>/

ok super tylko ze takie glupie pytanie zadam jak pobrac ta zmienna z tego kodu? :<

“Plik:#{$&}”
“Plik:#{$1}”
zadne nie dzialaja :<

co w nawiasach masz pod $1, $2 i tak dalej

No wlasnie nie dziala mi to

[code]puts Dir[’**/*.xml’]

wypisuje wszystkie pliki na ktorych dziala.

$wejscie = [//, /</title>/, /<section.>/,
/</section>/, /<item/>/, //,
/</itemize>/, /<chapter.
>/, /</chapter>/,
/<p/>/, /<eol/>/, //, /</b>/,/^ /, /<figure src="(.?)".?>/, /<.>/]

tablica znacznikow ktore maja byc zamieniane

$wyjscie = [’==’, ‘==’, ‘’ , ‘’, ‘’,’’,’ ‘,’’, ‘’, ‘’, ‘’, ‘’’’’, ‘’’’’, ‘’, “Plik:#{$1}”, ‘’]

tablica znacznikow docelowych

for $i in 0…16
Dir.glob("**/*.xml").each do |file|
#pobieranie plikow do zamiany kodu
content = IO.read(file).gsub($wejscie[$i], $wyjscie[$i])
puts $1
File.open(file, “w”) do |f|
f << content

   # zamiana kodu z zapisaniem go

end
#miejsce=File.dirname(file)
#name=File.basename(file, “.xml”)
#File.rename(file,"#{miejsce}/#{name}.textile")

end

end[/code]
i potym gdzie powinno pisac Plik:en-opi.png
jest napisane Plik:

przebij się przez: http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ

[code=ruby]#jak dla mnie to działa

“aaaa” =~ /(\w)/
=> 0

$1
=> “a”[/code]
Twój kod wymaga poważnej refaktoryzacji

PS.
Czy ty próbujesz napisać konwerter z HTML to textile? Oby nie ;] Jest już sporo gotowych. Możesz to rozwiązać 2-3 linikami

jejku no nie znam sie na tym :slight_smile:
probuje napisac konwerter ale z XML do textile :slight_smile:

a co do mojego kodu to on widzi $1 jako to co ma byc ale nie wpisuje go w nowym kodzie
hmm czy moze zmienna
$wyjscie
nie moze uzywac innej zmiennej? jest taka mozliwosc?

xml i regexp? Na 99% “you are doing it wrong”.

dzieki za slowa pocieszenia :frowning:

Pogoogluj za xml parser ruby i następnym razem wytłumacz co chcesz osiągnąc zanim zaczniesz.

Ja bym zaczął od tego

http://nokogiri.org/Nokogiri/XML.html
http://nokogiri.org/tutorials/parsing_an_html_xml_document.html

Jak będziesz miał obiekty, to łatwo wyciągniesz wszystko co potrzebjesz i zrobisz z nimi co tylko będziesz chciał.

http://xml-simple.rubyforge.org/ to do XMLa (troszkę prostsze parsowanie XMLa)
Z jakich źródeł uczysz się Rubiego?

uczylem sie rubiego z jakiegos anglojezycznego kursu i troche z book of ruby

F:\testing folder>nokogiri
internal:lib/rubygems/custom_require:29:in require': 126: The specified modul e could not be found. - C:/Program Files/PuzzleFlow Ruby/lib/ruby/gems/1.9.1/g ems/nokogiri-1.4.4.1-x86-mswin32/lib/nokogiri/1.9/nokogiri.so (LoadError) from <internal:lib/rubygems/custom_require>:29:inrequire’
from C:/Program Files/PuzzleFlow Ruby/lib/ruby/gems/1.9.1/gems/nokogiri-
1.4.4.1-x86-mswin32/lib/nokogiri/nokogiri.rb:1:in <top (required)>' from <internal:lib/rubygems/custom_require>:29:inrequire’
from internal:lib/rubygems/custom_require:29:in require' from C:/Program Files/PuzzleFlow Ruby/lib/ruby/gems/1.9.1/gems/nokogiri- 1.4.4.1-x86-mswin32/lib/nokogiri.rb:13:in<top (required)>’
from internal:lib/rubygems/custom_require:29:in require' from <internal:lib/rubygems/custom_require>:29:inrequire’
from C:/Program Files/PuzzleFlow Ruby/lib/ruby/gems/1.9.1/gems/nokogiri-
1.4.4.1-x86-mswin32/bin/nokogiri:7:in <top (required)>' from C:/Program Files/PuzzleFlow Ruby/bin/nokogiri:19:inload’
from C:/Program Files/PuzzleFlow Ruby/bin/nokogiri:19:in `’

i wyskakuje mi jakis blad Ja juz tego calkiem nie rozumiem.