diff --git a/info/Regular_expression.html b/info/Regular_expression.html index 3584427..b65e5bc 100644 --- a/info/Regular_expression.html +++ b/info/Regular_expression.html @@ -1,390 +1,386 @@ + - -正規表現説明シート - - - - - - - + + 正規表現説明シート + + + + + + + +
-

CSV教材

-
-
    - -
  1. CSV形式について
  2. -
    - -
  3. CSVの構造について
  4. -
    - -
  5. CSVライブラリについて
  6. -
    - -
  7. Hashをもっと深く知ろう!
  8. -
    - -
  9. CSV.readを使ったプログラムを書いてみよう!
  10. -
    - -
  11. 番外編:CSVファイルへの「書き込み」
  12. -
    -
-
- -
-

CSV形式について

-

CSV形式とはあらゆる種類のソフトウェアで読み書きできる「表形式」で表現できるデータのことです。

-
- - - - - - - - -
漢字氏名カタカナ氏名電話番号メイルアドレス住所
-
-

表の中の各項目が揃った一単位のデータのことをレコードと言います。
上の表では外枠を指します
- レコードの中にある一つ一つの項目のことをフィールドと言います。
上の表では内枠を指します。 -

-

表計算ソフトなどでは1レコードを1行に、 1フィールドを1セルに書き込んで表現します。
- 表計算ソフトなどでデータの集合を保存するときはそのソフト固有の保存形式で記録しているため、その保存形式に対応したソフトを使わない限り開くことができません。
- しかしCSV形式はあらゆる種類のソフトウェアで読み書きできる形式です。

-

csvファイルを作るときは
ファイル名.csvという形で作ります。

-
- -
-

CSVの構造について

-

CSV形式は複数のフィールドをフィールドごとにカンマ(,)で区切り、 - 1レコードを1行におさめたテキストファイル形式となっています。

-

使うときのルール

-
    -
  1. 数値はそのまま書く
  2. -
  3. 文字列はそのまま、もしくはダブルクォート(”)で囲む
  4. +

    正規表現教材

    +
    +
      + +
    1. 正規表現について
    2. +
      + +
    3. 正規表現のメタ文字について
    4. +
      + +
    5. 例題プログラム
    6. +
    -

    例として

    -
      -
    • Hello(文字列)
    • -
    • 123(整数)
    • -
    • 456(文字列)
    • -
    • Hello,World(文字列)
    • -
    -

    という内容のCSVファイルを作るときに - Hello,123,”456”,”Hello, World” と表します。
    - この場合Hello,Worldにカンマがついています。
    - 空白文字かカンマがある場合必ずダブルクォートで括りましょう。 -

    -

    He said “Hello”. という文にはダブルクォート(”)が入っています。
    - この文を入れてCSVファイルを作るときは - ”He said ””Hello””.” と表します。
    - このように文字列自身にダブルクォートが含まれるときはダブルクォートを重ねて表します。

    +
    -

    -
    - - - - - - - - - - - - - -
    名前電話番号住所職業
    公益太郎000-0000-0000山形県学生
    -
    -
    - -
    -

    名前,電話番号,住所,職業
    -   酒田太郎,000-000-000,山形県,学生

    -
    -
- -
-

CSVライブラリについて

-

CSVライブラリとはRubyで使えるCSVファイルを使ってあらゆることを行えるようにする便利道具のようなものです。
- CSVファイルの「読み込み」「書き込み」「1行変換」「全データの繰り返し処理」などを行えます。

-

CSVファイルの読み込み①

-

CSV ファイルからデータを読むには CSV.read メソッドを使います。

-

使い方

-

data(変数) = CSV.read(csvファイル名)

-

これを使うとdataという変数に各行の各フィールドごとに配列化したものがさらに配列化されて入る。

+
+

正規表現について

+

データから文字・文字列を検索するときにそれらのパターンを指定する一般的な表現方法を正規表現といいます。
+ 調べたい文字・文字列が正規表現によってすぐに検索することができます。

+ 例えば、i(小文字)が含まれる文字・文字列の場合以下のように検索されます。
+ :i, programming, Application(小文字のiが含まれるので検索される。)
+ ×:I, Image(大文字のIなので検索されない。)

+

moji.csv

-

建物名,住所,電話番号
- 羽黒山 五重塔,山形県鶴岡市羽黒町手向,000-000-000
- 加茂水族館,山形県鶴岡市今泉字大久保,999-999-999
-

+

moji
+ i
+ programming
+ Application
+ I
+ Image

-

↓このようなCSVファイルをCSV.readで読み込むと配列の配列が返る -

+

kensaku1.rb

-

[["建物名", "住所", "電話番号"],
- ["羽黒山 五重塔", "山形県鶴岡市羽黒町手向", "000-000-000"],
- ["加茂水族館", "山形県鶴岡市今泉字大久保", "999-999-999"]] -

-
-

CSVファイルの読み込み②

-

CSV.readを使うときはCSV ファイルの1行目の見出しを - キーとして値を取り出せる形式で読んだ方が使いやすい。 -

-

キーとして値を取り出すとは? -

-

連想配列名 = {キー名1 => バリュー1, キー名2 => バリュー2, キー名3 => バリュー3} -

-

配列に似ているが配列が要素を指定するのに「0」から始まる添字を使用するのに対し、
- 添字に「キー」と呼ばれる任意の文字列を指定して「バリュー」と呼ばれる要素を指定する。 -

-

このようなものをHashと言います。

-
- -
-

Hashをもっと深く知ろう!

-

Hashの例

-
-

- menu = {
-
-  "そば" => "300円",
-  "ケーキ" => "500円",
-  "ハンバーグ" => "800円"
- }
- print menu["そば”]
- lunch = "ハンバーグ"
- print menu[lunch] -

-
-

出力結果

-

300円
- 800円 -

-

このように、Hashでは添字が番号ではなく指定したキーとなっている。
要素を取得する際も、キーを指定することでセットになっている値(バリュー)を取得する。
-

-

▶CSV.readでCSVファイルを読み込むときは青い部分を付け足すことでHash化させることができる

-

data = CSV.read("shonai.csv", :headers => true) -

-

そばは300円である。」というように「そば」と「300円」という2つの言葉が関連付いているときにHashを使うととても便利。 -

-
- -
-

CSV.readを使ったプログラムを書いてみよう!

-

今回作るのはCSV.readを使った観光スポットを検索するプログラムです。

-

今回使うファイルはshonai.csvkankou.rbです。

-

shonai.csv

-
-

- 建物名,住所,特徴
- 羽黒山 五重塔,山形県鶴岡市羽黒町手向,羽黒山参道、東北北地方では最古の塔といわれている。,
- 白山島,山形県鶴岡市由良2丁目,"由良海岸のシンボルである島。",
- 加茂水族館,山形県鶴岡市今泉字大久保657-1,約1万のミズクラゲがいる「クラゲドリームシアター」がある。,
- 庄内観光物産館 ふるさと本舗,山形県鶴岡市布目字中通80-1,庄内地方をはじめとするお土産を数多く取り揃えている。,
- 酒田米菓(オランダせんべいFACTORY),山形県酒田市両羽町2-24,オランダせんべいFACTORYではその工程を見学できる。,
- 丸池様,山形県飽海郡遊佐町直世荒川57,水深3.5メートル、湧き水だけで満たされた池。,
- 山居倉庫,山形県酒田市山居町1-1-20,庄内のシンボルである山居倉庫。,
- 道の駅「とざわ」高麗館,山形県最上郡戸沢村蔵岡黒淵3008-1,韓国風の外観が特徴の戸沢村にある道の駅。, -

-
-

このcsvファイルを読み込んで取り出していくプログラムを書いていく。

-

kankou.rb

-
-      require 'csv'# CSVライブラリ読み込み
-        data = CSV.read("shonai.csv", :headers => true)#観光スポット一覧で使うcsvファイル読み込み
-        
-        while true
-          puts "1 観光スポット一覧"
-          puts "0 終了"
-          print "どれかひとつ選んでください => "
-          input=gets.to_i
- if input == 0 then #もしinputが0だったとき - break #終了する - elsif input == 1 then #もしinputが1だったとき - #↓行ごとに取り出す - n = 0 - data.each{|row| # rowには1行ずつ値が入り繰り返される - printf("%d: %sとはどんなところ?\n", n+=1, row["建物名"]) - printf("住所 => %s \n特徴 => %s \n",row["住所"], row["特徴"]) - print("--------------------------\n") }#仕切りの機能(何個あってもいい) - else - print "1/0から選んでください\n" +

require 'csv'
+
+ data = CSV.read("moji.csv", headers: true)
+ data.each do |row|
+  if /i/ =~ row["moji"]
+   puts row["moji"]
+  end
end - end -

-

実際にプログラムを動かしてみてね!どう動いたかな?

-
+

+
+

プログラムの解説
+ 正規表現:/(スラッシュ)で囲みます。
+ =~:正規表現と文字列のマッチを行います。

+ -
-

CSVファイルへの書き込み

-

書き込みにはCSV.openメソッドを使う。

-
-

CSV.open(ファイル, モード) do |変数|
- :
- : (変数 << によってファイルの中に書き込む処理)
- :
- end

-
-

- 書き込む際は、CSV.open メソッドにファイル書き込みオプション "w" または "a" などを与えて行う。 -

-

書き込みオプションの主な例

-
+ +
+

例題プログラム

+

kensaku.csv

+
+

name,gakko,gakunen,kozukai
+ 公益太郎,三川八中,2,2000
+ 飯森花子,余目百中,1,4000
+ 鶴岡一人,タキタロウ小,4,200
+ 鶴岡二子,タキタロウ小,2,300
+ 遊佐梅子,丸池小,6,900

+
+ +

kensaku2.rb

+
+

require 'csv'
+
+ data = CSV.read("kensaku.csv", headers: true)
+ puts "学校で探す:1"
+ puts "金額で探す:2"
+ print "どれにしますか:"
+ sel = gets.to_i
+
+ if sel == 1
+  print "探したい学校名を入れてください:"
+  ptn = Regexp.new(gets.chomp)
+  #gets.chompで入力された文字列をRegexp.newにより正規表現に直す
+  data.each do |row|
+   if ptn =~ row["gakko"]
+    printf("%sさんは%s%s年です\n", row["name"], row["gakko"], row["gakunen"])
+   end
+  end
+ elsif sel == 2
+  print "絞り込みしたい金額を入れてください:"
+  gaku = gets.to_i
+  data.each do |row|
+   if gaku < row["gozukai"].to_i
+    printf("%sさんは%d円もらっています\n", row["name"], row["kozukai"].to_i)
+   #csvから読んできたデータは全部文字列
+   #数字で比較するときは.to_iや.to_fを使う
+   end
+  end
+ else
+  printf("%d番はありません。さようなら。\n", sel)
+ end
+

+
+
+ +

+ 正規表現を使ったプログラムを作成してみよう!!

+ + + + \ No newline at end of file diff --git a/info/index.html b/info/index.html index 95beed1..5ba12f5 100644 --- a/info/index.html +++ b/info/index.html @@ -32,6 +32,7 @@
  • Zoom音声トラブルの際はこちら
  • JD説明シート
  • CSV説明シート
  • +
  • 正規表現説明シート
  • koeki MAILの使い方
  • ZOOMの更新方法