14. april 2009 - 13:17Der er
2 kommentarer og 1 løsning
Ruby: Parse tags fra fil til liste
Hej folkens
Jeg skal ha lavet et lille script til at finde nogle bestemte tags fra noget kode. Jeg har så brug for at få lavet en liste af de tags jeg har fundet. Listen skal bruges til en enum i min kode. Alt sammen er jo meget let, men der er et lille problem, og så kunne jeg godt tænke mig at få nogle generelle gode råd.
Nedenstående er en stærkt simplificeret version af mit script: def EnumName(str) return "TAGNAME_#{str.gsub(/[\s\%\"\#\(\)\{\}\\\/\&\[\]]/, '_')}" end
def ParseFile(filename) fh = File.new(filename, 'r') fh.each { |line| a = line.scan(/\<(.+?)\>/)[0] if a != nil outfile.puts " #{EnumName(a[0])}," end } end
Problemet er nu at listen kommer til at slutte med et komma. Hvordan løsr jeg dette smartest? Umidlbart ville jeg nok helt undlade at skrive kommaet ud i første omgang, og så bare skrive det når jeg finder den næste linie. Er det en god ide, eller er der andet der er smartere?
Nu ved jeg ikke så meget om ruby, men jeg kender til problemet. Jeg plejer at løse det ved at skrive alt ind i en variabel først, og så fjerne det sidste komma vha. en substr funktion.
Jeg sætter nu selv kommaet, så det er ikke det at komme af med kommaer, sådan generelt set. Det er kun det sidste komme der ikke må være der.
Jeg tror nu planen bliver at jeg gemmer stringen der skal bruges i en variabel. Når jeg finder et nyt tag, skriver jeg den gamle ud med komma efter, og gemmer den nye string i valiablen. Til sidst, lige efter loopet, skriver jeg så indholdet af variablen ud, uden komma efter.
Jeg tror ikke det kan gøres mere effektivt end det, men jeg vil gerne høre fra jeg hvis der er noget der er smartere.
Sådan noget i stil med det her: def EnumName(str) return "TAGNAME_#{str.gsub(/[\s\%\"\#\(\)\{\}\\\/\&\[\]]/, '_')}" end
@nextLine= nil
def ParseFile(filename) fh = File.new(filename, 'r') fh.each { |line| a = line.scan(/\<(.+?)\>/)[0] if a != nil if(@nextLine != nil) puts " #{@nextLine}, " end @nextLine = EnumName(a[0]) end } end
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.