abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 06:00 | Nová verze

Byla vydána verze 11.1 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu. Zdůraznit lze například Security Dashboard.

Ladislav Hagara | Komentářů: 0
včera 17:00 | Nová verze

Po pěti letech vývoje byla vydána nová verze 2.6.0 svobodné tahové strategické počítačové hry Freeciv (Wikipedie) inspirované herní sérií Civilization. Přehled novinek v oznámení o vydání.

Ladislav Hagara | Komentářů: 0
21.7. 16:11 | Nová verze

Byla vydána verze 8.0 open source unixového operačního systému NetBSD (Wikipedie). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
21.7. 12:33 | Zajímavý projekt

Uživatel denholmsdead již více než rok zveřejňuje na redditu své obrázky s linuxovou tématikou. Náhledy obrázků jsou k dispozici na linux.pictures. Obrázky v plném rozlišení na GitLabu.

Ladislav Hagara | Komentářů: 4
20.7. 18:55 | Zajímavý projekt

Společnosti Google, Microsoft, Twitter a Facebook společně představily open source platformu Data Transfer Project (DTP). Cílem platformy je zjednodušit uživatelům přechod a přenos dat mezi jednotlivými online službami. Podrobnosti v pdf a na GitHubu.

Ladislav Hagara | Komentářů: 6
20.7. 18:33 | Nová verze

Canonical a Microsoft společně oznámili, že PowerShell Core je nově dostupný také jako snap balíček na Snapcraftu. Microsoft uvolnil zdrojové kódy PowerShellu (Wikipedie, GitHub) v srpnu 2016 pod open source licencí MIT a naportoval je na Linux.

Ladislav Hagara | Komentářů: 2
20.7. 13:11 | Zajímavý projekt

Novinkou v minor aktualizaci webového prohlížeče Vivaldi je podpora vyhledávače Qwant (Wikipedie). Vývojáři Vivaldi zdůrazňují, že se jedná o evropský vyhledávač respektující soukromí uživatelů.

Ladislav Hagara | Komentářů: 7
20.7. 01:33 | Nová verze

Po šesti letech od vydání verze 1.0 byla vydána verze 2.0 multiplatformního editoru tagů MusicBrainz Picard (Wikipedie). Přehled novinek, vylepšení a oprav v changelogu.

Ladislav Hagara | Komentářů: 0
19.7. 16:22 | Nová verze Ladislav Hagara | Komentářů: 14
19.7. 15:00 | Komunita

Dnes končí podpora Ubuntu 17.10 Artful Aardvark. Uživatelům je doporučen přechod na Ubuntu 18.04 Bionic Beaver s prodlouženou podporou do roku 2023. Podpora standardních verzí Ubuntu je 9 měsíců. Verze 17.10 byla vydána 19. října 2017.

Ladislav Hagara | Komentářů: 12
Jak čtete delší texty z webových stránek?
 (77%)
 (20%)
 (5%)
 (7%)
 (2%)
 (10%)
Celkem 376 hlasů
 Komentářů: 40, poslední 29.6. 10:21
    Rozcestník

    Řazení ve sloupcích a základy Ruby

    22.11.2017 01:47 | Přečteno: 1510× | Linux | poslední úprava: 22.11.2017 01:46

    Program načítá jednotlivé řádky z textového souboru, jehož název je na příkazové řádce jako argument, a poté je vypíše seřazené ve sloupcích, jako to dělá například příkaz ls. Pokud bychom měli na každém řádku klíčová slova z jazyku Golang, výpis by vypadal takto:
    break       defer       goto        range       var         
    case        else        if          return                  
    chan        fallthrough import      select                  
    const       for         interface   struct                  
    continue    func        map         switch                  
    default     go          package     type
    
    Zde již samotný program:
    TIOCGWINSZ = 0x5413
    
    
    def get_size
      buf = [0, 0, 0, 0].pack("S4") 
    
      if STDOUT.ioctl(TIOCGWINSZ, buf) >= 0
        row, col, x, y = buf.unpack("S4")  
      else
        row = 20
        col = 70
      end    
      [row, col]
    end
    
    
    words = []
    maxlen = 1
    
    row, col = get_size
    
    ARGF.each do |line|
      if line !~ /^\s+$/
        line.strip!
        if (s = line.size) > maxlen
          maxlen = s  
        end
        words << line
      end
    end
    
    words.sort!
    maxlen += 1					#mezera
    
    col = col / maxlen
    row = (words.size + col) / col
    fmt = "%%-%ds" % maxlen
    
    (col*row).times do |i|						
      target = (i % col) * row + (i / col)		#svisle razeni  
      str = sprintf(fmt, (target < words.size) ? 
    			words[target] : "")  
      print str
      puts if (i + 1) % col == 0 
    end
    
    Následuje několik poznámek.

    V Ruby proměnné definované mimo metody nejsou v metodách viditelné. K vytvoření globální proměnné se používá prefix $ ($global). Funkce pack a unpack převádějí hodnoty na proud bajtů, potažmo proud bajtů na jednotlivé hodnoty, stejné funkce nalezneme i v Perlu a Pythonu.
    a = [1,2,3,4,5,6,7,8,9,10]
    b = a.pack('i10')		# b je proud deseti 4 bajtových cisel
    c =  b.unpack('i*')
    c == b 				# vraci true
    
    Různé způsoby vytvoření pole
    a = [3, 2, 1]
    b = []         			# nové, prázdné pole
    empty = Array.new		# nové, prázdné pole
    nils = Array.new(3)             # nils je [nil, nil, nil]
    zeros = Array.new(4, 0)         # zeros je [0, 0, 0, 0]
    count = Array.new(3) {|i| i+1 } # count je [1, 2, 3] 
    
    [[1,2],[3,4],[5]]		# pole poli
    
    [1, 2, 3].length		# 3
    [].size				# 0, synonymum pro length
    
    Změna prvků v poli
    a = [1, 2, 3]
    a[0] = 0		# [0, 2, 3]
    a[-1] = 4		# [0, 2, 4]
    a[3] = 6		# [0, 2, 4, 6]
    a[5] = 8		# [0, 2, 4, 6, nil, 8]
    a << 10 		# [0, 2, 4, 6, nil, 8, 10]
    a << 12 << 14		# [0, 2, 4, 6, nil, 8, 10, 12, 14]
    a = [1, 2, 3]		# [1, 2, 3]
    a + a			# [1, 2, 3, 1, 2, 3]
    a.concat([4, 5])	# [1, 2, 3, 4, 5] a se meni, zadny vykricnik
    
    a = ['a', 'b', 'c']
    a.insert(1, 1, 2)	# a je ['a',1,2,'b','c']
    
    Odstranění prvku
    a = [1,2,3,4,5,6]
    a.delete_at(4)          # vraci 5, a je a = [1,2,3,4,6]
    a.delete_at(-1)         # vraci 6, a je [1,2,3,4]
    
    Odstranění podle hodnoty
    a.delete(4)		        # 4, a je [1,2,3]
    a[1] = 1		
    a.delete(1)		        # 1, a je [3]
    a = [1,2,3]
    a.delete_if {|x| x%2==1 }	# odstrani liche prvky, a je [2]
    a.reject! {|x| x%2==0 }		# jako delete_if, a je []
    
    Bloky

    Proměnné definované v bloku mají platnost pouze v tom bloku. Bloky mohou být ohraničené buď složenými závorkami, anebo klíčovými slovy do a end, do a end se zpravidla používá u víceřadkových bloků.
    5.times  {|i| print i }                    # tiskne "01234"  
    0.upto(5) {|i| print i }                   # tiskne "012345"
    
    a = [3, 2, 1]
    a.each {|elm| print elm }      	           # tiskne "321"
    b = a.map {|x| x*x }         	           # b je [9, 4, 1]
    c = a.select {|x| x%2==0 }    	           # c je [2], jen sude
    sum = a.inject {|s,x| s+x }                # sum je 6, soucet prvku
    a.each_with_index{|e,i| print e,i}         # tiskne 302112
    
    (5..7).each_with_index {|x,i| print x,i }  # tiskne "506172"
    
    Iterace řetězce
    s = "¥1000"
    s.each_char {|x| print "#{x} " } 	# tiskne "¥ 1 0 0 0"
    
    "hello".each_byte.to_a			# vraci [104, 101, 108, 108, 111]
    
    s = "A\nB"
    s.each_line {|l| print l.chomp}		# tiskne "AB"
    
    Blok v bloku
    1.upto(10) do |i|
      1.upto(10) do |i|
        print "#{i} "
      end
      print " ==> Row #{i}\n"
    end
    
    1 2 3 4 5 6 7 8 9 10  ==> Row 1
    1 2 3 4 5 6 7 8 9 10  ==> Row 2
    1 2 3 4 5 6 7 8 9 10  ==> Row 3
    1 2 3 4 5 6 7 8 9 10  ==> Row 4
    1 2 3 4 5 6 7 8 9 10  ==> Row 5
    1 2 3 4 5 6 7 8 9 10  ==> Row 6
    1 2 3 4 5 6 7 8 9 10  ==> Row 7
    1 2 3 4 5 6 7 8 9 10  ==> Row 8
    1 2 3 4 5 6 7 8 9 10  ==> Row 9
    1 2 3 4 5 6 7 8 9 10  ==> Row 10
    
    Ve starší verzi Ruby 1.8 by byl vnější index překryt a číslo řádku by zůstávalo na deseti. Kvůli lepší kompatibilitě existuje v Ruby 1.9 přepínač -w, který varuje, pokud má parametr bloku stejný název jako již existující proměnná.
    #!/usr/bin/ruby -w
    
    Soubory
    File.open(filename) do |f|	     # otevre soubor
      f.each {|line| print line }	     # tiskne vsechny radky
    end				     # zavre soubor
    
    File.open(filename) do |f|
      f.each_with_index do |line,number|
        print "#{number}: #{line}"
      end
    end
    
    V Ruby samozřejmě existují i běžné cykly jako while, until nebo for/in.
    while line = gets.chomp do      # do lze vynechat, pokud nasleduje \n 
      case line
      when /^\s*#/			# komentar
        next
      when /^quit$/i
        break
      else
        puts line.reverse
      end
    end
    
    Řetězce jsou v Ruby změnitelné (mutable).
    "Ruby" + " rocks!" 		# "Ruby rocks!"
    "Ruby! " * 3			# "Ruby! Ruby! Ruby! "
    "%d %s" % [3, "rubies"]		# "3 Rubies"
    
    greeting = "Hello"
    greeting << " " << "World"
    puts greeting   		# tiskne "Hello World"
    
    
    s = "hello"
    s.length			# vraci 5, pocet znaku v 1.9, bajtu v 1.8
    s.size				# synonymum pro length
    s.concat(" world")              # synonymum pro <<
    				# meni se s a vraci nove s
    s.empty?			# vraci false
    
    s = "hello\n"			
    s.chomp!			# vraci "hello", odstranen \n, meni se s 
    s.chomp				# vraci "hello", nic se neodstranuje
    s.chomp!			# vraci nil, nic se neodstranuje
    s.chomp!("o")			# vraci "hell", meni se s
    
    s = "hello\n"
    s.chop!				# vraci "hello", odstranen \n, meni se s 				
    s.chop				# vraci "hell", s se nemeni
    
    s = "\t hello \n"
    s.strip				# vraci "hello"
    s.lstrip			# vraci "hello \n"
    s.rstrip			# vraci "\t hello"
    
    Metody strip, lstrip a rstrip mají i verze s vykřičníky, takže mění objekty volající tyto metody.

    Metoda puts tiskne řetězec a na rozdíl od print jej ukončí \n, lze ji použit i bez argumentů, jen k odřádkování.

    K rychlému otestování kódu můžete použít interaktivní interpreter irb.

    Až budu umět Ruby lépe, tak sem dám třeba něco o objektech, asociativních polích a dalších operacích s řetězci a poli, protože tohle bylo jen několik výpisků z knihy The Ruby Programming Language.

    Zdroj: The Ruby Programming Language a Perl Cookbook.        

    Hodnocení: 80 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    22.11.2017 11:08 ttt
    Rozbalit Rozbalit vše Re: Řazení ve sloupcích a základy Ruby
    Ještě ti chybí trochu lenosti :) Pomalé to bude tak jako tak, tak proč si např. nespočítat délku dalším cyklem, je to kratší a přehlednější.

    Práce se soubory jde zkrátit na:
    File.open(filename).each do |line|
      print line
    end

    Zápis blocku jde zkrátit pomocí '&':
    [1,2,3].inject(&:+) # 6

    S použitím pár dalších knihovních metod:
    TIOCGWINSZ = 0x5413
    
    def terminal_size
      buf = [0, 0, 0, 0].pack('S4')
    
      if STDOUT.ioctl(TIOCGWINSZ, buf) >= 0
        buf.unpack('S4')[0..2]
      else
        [20, 70]
      end
    end
    
    words = ARGF.readlines.map(&:strip).sort
    width = words.map(&:length).max + 1
    
    col = terminal_size[1] / width
    row = words.size / col + 1
    padding = row - words.size % row
    words.fill('', words.size, padding)
    
    puts words.each_slice(row).to_a.transpose
      .map { |ws| ws.map { |w| w.ljust(width) }.join }
      .join("\n")
    
    22.11.2017 12:29 sad
    Rozbalit Rozbalit vše Re: Řazení ve sloupcích a základy Ruby
    Pěkné. Díky za tipy.
    22.11.2017 12:56 RM
    Rozbalit Rozbalit vše Re: Řazení ve sloupcích a základy Ruby
    pěknej příklad :)
    23.11.2017 18:47 ehm
    Rozbalit Rozbalit vše Re: Řazení ve sloupcích a základy Ruby
    Máš ten kód celý na ruby.
    xsubway avatar 23.11.2017 20:06 xsubway | skóre: 13 | blog: litera_scripta_manet
    Rozbalit Rozbalit vše Re: Řazení ve sloupcích a základy Ruby
    alespoň to není na JavaScript .-)
    4.12.2017 06:48 s.b.
    Rozbalit Rozbalit vše Re: Řazení ve sloupcích a základy Ruby
    A tohle nedostane tučňáka?

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.