Witam,
w jaki sposób można w pliku tekstowym po każdym wystąpieniu wyrażenia regularnego znalazł się znak końca linii?
wyrażenie jest postaci: /\W\d\d\d\W/
Witam,
w jaki sposób można w pliku tekstowym po każdym wystąpieniu wyrażenia regularnego znalazł się znak końca linii?
wyrażenie jest postaci: /\W\d\d\d\W/
Witam,
Koniec linii to $ w wyrażeniach regularnych.
chodzi mi raczej aby po /\W\d\d\d\W/ umieścić /n,
ponieważ w jednej linii może wystąpić więcej niż jeden ciąg, który można dopasować do wyrażenia i po każdym trzeba umieścić /n
Metoda, której szukasz to gsub
czyli to powinno być coś w stylu:
File.open(“test.txt”) do |f|
f.gsub(/\W\d\d\d\W/, /\W\d\d\d\W$/)
end
zamiast trzy razy \d daj \d{3}. pewnie można to jeszcze bardziej uprościć. Polecam to do testów http://rubular.com/ i to http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/ też się przyda
File.open("test.txt") do |f|
f.gsub(/\W\d[3]\W/) { |match| "#{march}\n" }
end
nie działa mi i nie wiem czemu…
nie wstawia \n, nawet jak podaje ścieżkę pliku “c:\test.txt”
File.open(“c:\test.txt”) do |f|
f.gsub(/\W\d{3}\W/) { |match| “#{march}\n” }
end
plik zapisuje wykonawczy zapisuje jako test.rb czy to jest dobre rozszerzenie? bo sam już nie wiem…
jest literówka { |match| “#{ march }\n” }
[quote=sevos]File.open("test.txt") do |f|
f.gsub(/\W\d[3]\W/) { |match| "#{march}\n" }
end
[/quote]
No to nie bardzo ma prawo zadziałać i nie chodzi o literówkę. Jeśli chcesz uzyskać wyniki na ekranie to zrób tak:
File.open("test.txt") do |f|
f.each do |line|
puts line.gsub(/\W\d[3]\W/) { |match| "#{match}\n" }
end
end
To może nie da Ci dokładnie tego, co chciałeś uzyskać, ale przybliży chyba do poprawnego rozwiązania.
wyświetla ale nie robi tego co ma robić…
Wklej tutaj przykładowy input.
Program powinien działać na czymś takim… po każdym nr telefonu czyli /(\d{3} ){3}/ lub /\d{2} \d{3}( \d{2}){2}/ powinien pojawić koniec linii ale wyświetla się tylko to co było bez zmiany… wyrażenie są poprawne ale coś nie działa z nadpisaniem pliku (pik nie posiada, żadnych ustawień uniemożliwiających edycje) lub też z enterami wpisujący do innego piku tekstowego
H. “DOMEX” DOMINICZAK WOJCIECH 62-200 Gniezno, Jana III Sobieskiego 11a/6 503 047 944 P.U.H. “Maria”
Piotr Błaszkowski Komornik Sądowy Rewiru I Przy Sądzie Rejonowym W Gnieźnie 62-200 Gniezno, Jana III Sobieskiego 20 603 078 754 Poczta Polska - Filia 62-200 Gniezno, Jana III Sobieskiego 20 Poczta Polska - “Twoja Apteka Rodzinna” 62-200 Gniezno, Jana III Sobieskiego 17 61 425 40 26 Polska Grupa Farmaceutyczna S.A. - Apteka Dbam o Zdrowie “Twoja Apteka Rodzinna” 62-200 Gniezno, Jana III Sobieskiego 17 61 426 11 90 Polski Związek Emerytów, Rencistów i Inwalidów - Oddział Rejonowy w Gnieźnie 62-200 Gniezno, Jana III Sobieskiego 20 61 426 32 49 Polski Związek Wędkarski - Koło w Gnieźnie 62-200 Gniezno, Jana III Sobieskiego 20 61 426 37 64 Powiatowy Urząd Pracy w Gnieźnie 62-200 Gniezno, Jana III Sobieskiego 20 PRACOWNIA PROTETYKI STOMATOLOGICZNEJ ‘‘DENTO-MED’’ S.C. 62-200 Gniezno, Jana III Sobieskiego 21 608 519 762 “Prima A’Prillis” Tyloch Jacek 62-200 Gniezno, Jana III Sobieskiego 17 61 426 73 48 PROART - DEKORACJA DOMU
Całość jest mi potrzebna do stworzenia bazy danych firm, do projektu na zaliczenie…
Alert. Ustawa o ochronie danych osobowych.
Ten kod nie zapisuje Ci do pliku.
[code]old_content = File.read(“plik.txt”)
old_content.gsub!(…)
File.open(“plik.txt”,“w”) { |f| f.write(new_content) }[/code]
@seban ustawa o ochronie danych osobowych nie dotyczy danych firm, ponieważ one są jawne (a te są, z książki telefonicznej)
PHONE_REGEX = /\d{3} \d{3} \d{3}|\d{2} \d{3} \d{2} \d{2}/
puts File.read("in.txt").gsub(PHONE_REGEX, "\\0\n")
To żyje…
Teraz tylko jeszcze postaram się opracować zapis tego do jakiegoś pliku i będzie dobrze…
[quote=czak]PHONE_REGEX = /\d{3} \d{3} \d{3}|\d{2} \d{3} \d{2} \d{2}/
puts File.read("in.txt").gsub(PHONE_REGEX, "\\0\n")
[/quote]
Tak tylko z ciekawosc zapytam, do czego jest \0 w tym przypadku ? To według RFC ?
koniec = File.open("po.txt","w+")
koniec.write(File.read("in.txt").gsub(/\d{3} \d{3} \d{3}\W|\d{2} \d{3} \d{2} \d{2}\W/, "\\0\n") )
koniec.close
To żyje…
Dziękuje wszystkim co pomogli
Właściwie to jest ‘\0’, tylko escape’nięte żeby wstawić jeszcze \n. \0 to taki “domyślny” capture group obejmujący całe wyrażenie. Nie wiem czy to zgodne z RFC, ale działa