専門学校59日目(情報工学)7月4日(木)

1時限~3時限
Linux実習 新しいLinuxの教科書 第2版

前回、6月27日はChapter12のすべてとChapter13の始めの箇所を学びました。そしてLinuxのコマンドは9割がた網羅しました。
今日は正規表現を学びます。
検索したいものは、固定文字列ばかりではなくアルファベットのみで数値を含まないなど様々なパターンを持つ文字列を検索したいとき、条件に合致する文字列集合を表現するための記法が正規表現。
^記号が行の先頭を意味する。^cronと書くと行の先頭がcronという文字列である、という意味の正規表現になる。

ls /etc | grep '^cron'とシングルクォートで囲んだ。これはシェルに正規表現を展開させないためにやっている。正規表現では*などは特別な意味を持ち、メタ文字という。*はシェルに渡されるとパス名展開のワイルドカード記号と解釈される。それを避けるためにシングルクォートで囲う。

教科書に取り上げられている正規表現を見ていけば7、8割は押さえられると思います。
.(ドット)というメタ文字は任意の1文字にマッチする。

grep '\.org' example.txt
のようにメタ文字ドットの前に\(円マークになっているが実際はバックスラッシュ)を置いてメタ文字の意味を打ち消すことをエスケープするという。

任意の1文字でなく、特定の文字を指定したい場合は[]というメタ文字を使う。
grep 't[ef]st' example.txt
なら、testまたはtfstという文字列にマッチする。
grep 'mail[^13]' example.txt
なら、mailの後に1と3以外の文字として解釈されmail7などがマッチする。

^記号は''の中だと行頭を意味し、[]の中だと含まれないを意味する。

Ber
Beer
BeerBeer
BeerBeerBeer
Beeeeeeeeer!!!
Bear
Br
My Vodka
My Wine
Wine Wine
WineWine
と記載したdrink.txtファイルをviで作りました。
シェルスクリプトを作るのにviを使いますので今のうちに慣れておいてください。
このファイルは正規表現のコマンドの学習に使っていきます。

Be*rという正規表現は*が直前のeの0回以上の繰り返しを意味し、BrやBeerなどとマッチする。
拡張正規表現とは使えるメタ文字を増やした正規表現である。そうでない正規表現は基本正規表現という。

()は囲んだ文字列をグループ化することができる。|はORを意味し、その|の左右のいずれかの文字列を指定する。

chapter14は飛ばしchapter15に入ります。
シェルスクリプトはシェルのコマンドラインをあらかじめ記述しておくファイルのこと。来週からシェルスクリプトを書いていきます。

本日のレポートは以下のようになりました。
■実際に実施したコマンド
$ ls /etc | grep '^cron'
$ ls /etc | grep 'cron*'
$ grep 't.st' example.txt
$ grep 't..st' example.txt
$ grep '.org' example.txt
$ grep '\.org' example.txt
$ grep 't[ef]st' example.txt
$ grep 't[a-k]st' example.txt
$ grep 'mail[1-4]' example.txt
$ grep 'mail[^13]' example.txt
$ grep 'net' example.txt
$ grep '^net' example.txt
$ grep 'net$' example.txt
$ cat /etc/crontab | grep '^$'
$ cat /etc/crontab | grep '[^^$]'
$ grep 'Be*r' drink.txt
$ grep 'B[ea]*r' drink.txt
$ ls | grep '^re.*txt$'
$ grep -E 'Wine ?Wine' drink.txt
$ grep -E 'Be{1,2}r' drink.txt
$ grep -E 'Be{4,}r' drink.txt
$ grep 'Be\{4,\}r' drink.txt
$ grep -E '(Wine){2,}' drink.txt
$ grep -E '(Beer){2,}' drink.txt
$ grep -E '(Vodka|Wine)' drink.txt
$ less drink.txt

■疑問点1
メタ文字
■調査結果・解決方法1
シェルで特別な意味を持つ記号のこと。メタキャラクタともいう。$は行末、+は直前の文字の1回以上の繰り返し、?は直前の文字の0回もしくは1回の繰り返し、|は左右の選択肢のいずれか、()は正規表現の有効範囲などがある。

■疑問点2
正規表現
■調査結果・解決方法2
特定の条件を表す文字列を抽象的に表現したもので、任意の文字列パターンを表す表記方法。複雑な文字列の検索や抽出するときに使います。
拡張正規表現でのみ使えるメタ文字もある。

■疑問点3
シェルスクリプト
■調査結果・解決方法3
シェルのコマンドをあらかじめ記述しておくファイルのこと。
実行したい一連のコマンドを記述しておくと、記述したシェルスクリプトを実行するだけで済むようになる。
シェルスクリプトはファイルに保存することになるので再利用ができる利点がある。

■疑問点4
拡張正規表現
■調査結果・解決方法4
正規表現を拡張したもので、使えるメタ文字が増え書き方が基本正規表現と異なるところもある。



■振り返りレポート
※実施した内容を以下に列挙する
・grepコマンドを使い、さらにシングルクォーテーションで正規表現を指定しました。
・viでテキストファイルを作成しました。
・メタ文字ドットを使い任意の1文字とマッチさせました。
・メタ文字[]を使いマッチさせたい特定の文字を指定しました。
・\.でメタ文字ドットを打ち消すエスケープを使いました。
・行頭を意味する^や行末を意味する$を使って検索を実行しました。
・メタ文字*で繰り返し文字とマッチさせました。
・拡張正規表現を学び実行しました。
・文字列の繰り返し回数を指定するメタ文字を、基本正規表現と拡張正規表現の両方で試しました。
・正規表現をグループ化する()を使いました。
・いずれかの条件に一致することを指定できる|というメタ文字を使いました。
・シェルスクリプトについて学びました。


4時限~6時限
国家試験対策 アルゴリズムとデータ構造

前回は第5章の途中まで進みました。
■変数のスコープ
スコープというのは有効範囲を意味します。これまで扱った変数は局所変数(ローカル変数)といい、宣言されたプログラムの中だけがスコープでした。変数はスコープ外からは参照できない。すべてのプログラムをスコープとする変数を大域変数(グローバル変数)といいます。

大域:整数型:value
〇twice()
value←value×2

〇main()
value←5
twice
出力(value)

局所変数は、局所変数はプログラムの宣言部で宣言し、スコープは変数が宣言されたプログラム。
大域は擬似言語の先頭で宣言し、スコープはすべてのプログラム。

■引数と戻り値
引数は手続きを呼び出すときに、呼び出し元のプログラムから手続きへ渡すデータ。
引数が複数ある場合はカンマで区切って書く。手続きがデータを受け取るための変数を仮引数という。引数として渡すデータの数やデータ型、順序は手続きの定義と一致している必要がある。呼び出し元のプログラムが渡す値や変数を実引数という。
いかにシンプルな例を載せる。

〇add(整数型:a,実数型:b)
出力(a+b)
手続の呼び出しには、
add(3, 4.2)
のようにする。
実引数は変数を指定することもできる。x=3,y=4.2としてadd(x,y)とできる。
混乱しやすいが、呼び出すほうを実引数、呼び出されるほうを仮引数です。


手続から呼び出し元のプログラムに返却されるデータを戻り値という。戻り値を返却する手続きを関数という。関数名の前に戻り値のデータ型を記述する。
〇戻り値のデータ型:関数名()

関数の中で戻り値を返却するにはreturn文を使います。
return 戻り値
と書く。

関数の例
〇整数型:add(整数型:a,整数型:b)
return a + b

整数型:n
n←add(2,3)
出力(n)

return文を実行すると、その時点で戻り値を返して、それ以降の処理は実行されない。
手続もreturnで終了することができるが、手続には戻り値がない。


第6章
■配列
配列は複数の変数をまとめて、ひとまとまりのデータとして同一の名前で操作できるようにしたデータ構造。
配列のルール
①使用する目的や役割を理解しやすい名前にする
②同一配列内の要素はすべて同じデータ型になる
③配列の要素を参照するには添字を使う
④添字は先頭が0か1
⑤添字の指定は定数のほかに変数や計算式を入れることができる
⑥要素の参照は一つの処理で一つずつしか処理できない

配列には次元があり、変数を一直線に並べたものを1次元配列という。さらに縦にも並べたものを2次元配列という。1次元配列の要素数は1行×列になり、2次元配列の要素数は行×列の値になる。

■1次元配列の操作
この項目は例題を3問解きました。問題の内容は配列を使ったもので、流れ図と擬似言語コードに穴埋めをしていく形式です。

■1次元配列の挿入・削除
これも例題形式で学ぶ項目でした。
追加したい位置から配列の要素を後ろに一つずらして、最後に追加したいデータを指定位置に代入するといった問題です。
例題では数が少なかったが、1000件データがあって、先頭付近に追加するとその分だけずらすので大変になる。
削除する問題では削除したところに後ろから一つずつ前にずらす操作をしました。
削除するときは配列の最後の要素a[n]の手前まで操作するので、n-1まで動かし、
a[k]←a[k+1]とデータを入れていく。


■2次元配列の操作
ループ処理をさらにループすることを多重ループという。ループや選択(if)に中でループや選択を行うことを入れ子という。
2次元配列3行4列の配列の各要素に0を格納していく問題などを解きました。

6章練習問題
練習問題も流れ図や擬似言語の空欄に埋めていく問題でした。


7限目
IT法規 知的財産権管理技能検定3級 公式テキスト改訂14版

月曜日の授業が中止になったので、本日木曜日の7限に情報数学の代わりに授業しました。
前回学んだ実用新案法は特許よりも軽いもので発明までいかず、考案でよかった。実用新案には方法は入らないなど、特許と違いがあった。早く権利化できるが、実際に権利を主張するには実用新案技術評価書を発行してもらう必要があった。
実用新案を調べ書き出しました。参照したページは特許を調べた時と同じです。
https://www.j-platpat.inpit.go.jp/

この記事が気に入ったらサポートをしてみませんか?