wafuの技術

技術習得の努力メモです。

Rubyで文字変換(編集中)

Rubyで値の変更メモ

#ASCIIコードを文字に変換
a = 65
a.char #=>"A"

#数字を文字に変換
a.to_s #=> "65"

#数字を16進数に変換
a.to_s(16)   #=> "a"
a.to_s.hex() #=> "16" 10を16にしたら意味が違う・・・

#その他変換
"11111111".to_i(2) #=>255
"255".to_i(10)     #=>255
"FF".to_i(16)      #=>255

#クラスの確認
a.class   #=> Integer

Rubyのブロック構文とdo

Rubyを勉強していて、理解ができなかったのが、ブロックという考え方です。

ループ処理ならわかるのですが、処理の単位ということでしょう。

■eachメソッドの例

(1..10).each do |v|
    puts v
end

doからendをブロックとして表す。
この処理は{}でも表せます。

(1..10).each {|v|
    puts v
}

一般的に複数行に渡る場合やブロックを記述する場合には、do...endを使用。
1行で記述する場合は、{....}を書くようです。

(1..10).each {|v| puts v}

Rubyでファイル処理(1)

Rubyでファイルの読み込み

Rubyの読み込みはブロックの読み込みが一般的なようです。
ブロックは、{}で囲んだ方法です。
特徴は、open,closeが不要です。

■1行ずつ読み込み

File.open("sample.txt","r") do |f|
    while line = f.gets
        puts(line)
    end
end

■1行ずつ読み(使えるのかな)

num = 1
File.open("sample.txt","r") do |f|
    f.each_line{|line|
        puts(num.to_s + ": " + line)
        num = num + 1
   }
end

■指定のバイト数を読み込む

File.open("sample.txt","r") do |f|
    puts(f.read(10))
    puts(f.read)
end

■各行を配列の要素として読み込む

File.open("sample.txt","r") do |f|
    lines = f.readlines
    puts(lines[0])              #1行目を出力
end

■ファイルにデータを書き込む

File.open("sample.txt","w") do |f|
    f.puts("sunday")        #改行付きで出力 
    f.print("monday")      #改行なしで出力
end

■バイナリファイルの読み込み(ブロック未使用)

io = File.open("aa.jpg","rb")
buf = io.read(400)
m = buf.unpack("i*")
p m[0]

■文字配列をファイルに書き込む

a = ["C++","COBOL,"FORTRAN","Go"]
File.open("sample.txt","w") do |f|
    a.each{|s|
         f.puts(s)
    }
end

■バイナリファイルの読み込みと書き込み

File.open("aa.jpg","rb")  do |infile|
    File.open("bb.jpg",wb") do |outfile|
         while d = infile.read(1)
               outfile.write(d)
         end
    end
end

■簡単な読み込み

a = File.read("aa.jpg")    #ファイルの読み込み
File.write("bb.jpg",a)      #ファイルの書き出し

Rubyで別のRubyを呼び出す

Rubyで別のRubyを呼び出す

main.rb

puts “start”
IO.popen(“ruby sub.rb”) do |f|
    f.each do |line|
            print line
    end
end
puts “finish”

sub.rb

STDOUT.sync = true      #文字列を全て受け取る
puts “sub start”
sleep 4
puts “sub end”

実行結果

start
sub start
sub finished
finish

Rubyでメール送信

Rubyでメール送信

require “net/smtp”
require “time”

smtp_server = “localhost”
from = “user@mail.example.com”
to = “user@mail.subdomain.com”
Net::SMTP.start(smtp_server) do |smtp|
From: #{from}
To: #{to}
Date: #{Time.now.rfc2822}
Subject: test message

Hello Ruby

EndMessage
end

Rubyでファイル一覧の取得

Rubyでファイル一覧を取得する基本です。

■ファイル一覧

Dir.glob('*') do | item |
      puts item
end

■ファイル一覧(拡張子を指定)

Dir.glob('*.jpg') do |item|
      puts item
end

■ファイル一覧(下位ディレクトリを含める)

Dir.glob('**/*') do |tem|
     puts item
end

■ファイル一覧(下位ディレクトリを含め、拡張子を指定)

Dir.glob('**/*.jpg') do |item|
     puts item
end

UbuntuのIPアドレスの設定

UbuntuIPアドレスを変更する方法です。


UbuntuIPアドレスの設定等
IPアドレスの一時変更
>sudo ip addr add 192.168.2.50/24

ゲートウェイの設定
>sudo ip route add default via 192.168.2.1

動的DNSの一時中止
>systemctl stop systemd-resolved
 恒久的な停止
  systemctl disable systemd-resolvd

DNSの一時的な書き換え
> sudo vi /etc/resolv.conf
内容を変えても、systemd-resolvedで書き換わる。


IPアドレスの恒久的な変更
/etc/netplan/99-config.yaml

network:
        versiion: 2
        renderer: networkd
        ethernets:
                 enp0s22
                       dhcp4: false
                       dhcp6: false
                       addressed: [192.168.1.20/24]
                       gateway4: 192.168.1.1
                       nameservers:
                                   addresses: [192.168.1.1]

反映は、
> sudo netplan apply


ubuntuのアップデート
sudo apt update
sudo apt install update-manager
sudo apt dist-upgrade
sudo do-release-upgrade