Ruby – práce se soubory (txt a csv)

Začneme tím nejjednoduším a postupně budeme přidávat

Než začneme s čtením zkontrolujeme si, zda daný soubor opravdu existuje a v případě, že nikoliv, tak program ukončíme

  
    unless File.exist?("jmeno souboru")
      puts "Nemam soubor"
      exit
    end

1 – Načtení a zápis do .txt

Načtení je v případě .txt super jednoduché, stejně tak zápis. Níže můžete vidět code pro čtení. Nejdříve načteme soubor jako takový a následně zprácováváme jednotlivé řádky. Ukázka zahrnuje i použití příkazu „.strip“, který oseká text o bílé znaky a následně příkaz „.split(“)“ rozseká získaný řetězec na jednotlivé chary a ty následně pomocí příkazu << pošle do pole.

      File.open("jmeno souboru.txt", "r") do |soubor|
        soubor.each_line do |radek|
          radek = radek.strip
          GLOB_POLE << radek.split('')
        end
      end

2 – Zápis používá stejnou logiku jako čtení. Liší se pouze zámněně „r“ za „w“ a tím, že již nenačítáme soubor jako takový.
Robot je jeméno třídy, v jejímž rámci voláme třídní proměnnou roboti. Roboti představují pole instancí třídy Robot, skrz které iterujeme a do každého řádku vypisujeme základní infomrace, které získáváme z jednotlivých instancí

   File.open("jmeno_souboru.txt", "w") do |line|
      Robot.roboti.each do |robot|
        line.puts "#{robot.jmeno}(#{robot.pozice[0]}x#{robot.pozice[1]}):#{robot.stav}"
      end
    end

3 – V zásadě stejnou konstukci použijeme pro práci s .csv soubory. I tady rozlišujeme mezi operací číst – písmeno r – a operací psát – písmeno w. A co je důležité, musíme si vyžádat knihovnu CSV a to náledujícím způsobem

   require "csv"

Načtení pak provedeme následujícím způsobem

    CSV.open("jmeno_souboru.csv", "r") do |soubor|
      soubor.each do |line|
       GLOB_POLE << Robot.new(line[0], line[1])
     end
   end

4 – Zápis do .csv je opět triviální.

    CSV.open("jmeno_souboru.csv", "w") do |soubor|
      Robot.roboti.each do |robot|
        soubor << "#{robot.jmeno}(#{robot.pozice[0]}x#{robot.pozice[1]}):#{robot.stav}"
      end
   end

V dalším článku se pak podíváme na xml a json.

Napsat komentář