ホーム » スタッフ » 斉藤徹 (ページ 99)

斉藤徹」カテゴリーアーカイブ

2025年6月
1234567
891011121314
15161718192021
22232425262728
2930  

検索・リンク

絶対PATH,相対PATHの演習

絶対PATH,相対PATHの理解のため、コマンドラインを用いた演習も行う。

ファイル関連コマンドの基本

(( まずは cmd.exe の起動 ))
メニュー検索より、"cmd.exe" を探して起動
(( ファイル操作命令の基礎 ))
dir PATH  ディレクトリの一覧を表示
 例:dir C:¥Windows
type PATH ファイルの内容を表示
 例:type Z:¥sample¥sample.c
mkdir PATH ディレクトリを作成
 例:mkdir Z:¥foo
rmdir PATH ディレクトリを削除
 例:rmdir Z:¥foo
echo "abc" > Z:¥sample¥data.txt テキストファイルに出力

演習

(( 絶対PATH ))
Z:
dir ¥
mkdir ¥fukui
echo "fukui" > ¥fukui¥fukui.txt
type ¥fukui¥fukui.txt
mkdir ¥fukui¥sabae
echo "sabae" > ¥fukui¥sabae¥sabae.txt
dir ¥fukui¥sabae
type ¥fukui¥sabae¥sabae.txt
(( 相対PATH ))
cd ¥fukui¥sabae
dir .
dir ..
type sabae.txt
type ..¥fukui.txt
dir ..¥..

ファイル入出力

今日は、ファイル入出力のプログラム演習。

ファイル入出力

 // 基礎的なファイル入力
#include <stdio.h>
void main() {
   FILE* fp ;
   if ( (fp = fopen( "data.txt" , "rt" )) != NULL ) {
      char name[ 100 ] ;
      int age ;

      while( fscanf( fp , "%s%d" , name , &age ) == 2 ) {
         printf( "%s %d\n" , name , age ) ;
      }
      fclose( fp ) ;
   }
}
 // 入力したデータから条件を満たすデータだけを出力
#include <stdio.h>
void main() {
   FILE* fp_in ;
   FILE* fp_out ;

   if ( (fp_in = fopen( "in.txt" , "rt" )) != NULL ) {
      if ( (fp_out = fopen( "out.txt" , "wt" )) != NULL ) {
         char name[ 100 ] ;
         int  age ;

         while( fscanf( fp_in , "%s%d" , name , &age ) == 2 ) {
            if ( age >= 18 )
               fprintf( fp_out , "%s %d\n" , name , age ) ;
         }
         fclose( fp_out ) ;
      }
      fclose( fp_in ) ;
   }
}

テキストモードとバイナリモード

前述プログラムでは、fopen のファイルモードで、"rt" , "wt" のように 文字"t"をつけている。これは、OSによる行末文字の取り扱いの トラブルを防ぐためのもの。

OSの成り立ちの違いで、Windows と Unix では、行末文字の取り扱い方法 が違う。

Windows では、次の行の先頭に移動するには、"\r"(キャリッジリターン)と "\n"(ラインフィード)が必要となる。

一方、Unix では、次の行の先頭に移動するには、"\n"(ラインフィード)だけ でいい。

この違いがあるため、Unixで開発されたC言語で書いたプログラムを Windows で動かそうとすると、

                       // Unix    Windows
printf( "Hello\n" ) ; // Hello    Hello
printf( "World\n" ) ; // World         World

と異なる表示になってしまう。これでは、WindowsでC言語を書く場合は、 printf( "Hello\r\n" ) といった書き換えが必要になってしまう。

これを防ぐために、fopen で "…t" 書くことで「テキストモード」に 指定すると Windows で printf( "\n" ) を出力すれば、 "\r\n" に変換して出力してくれる。入力時にも同様に、"\r\n" があると、 "\n" に変換してくれる。

絶対PATHと相対PATH

前述のプログラムで、fopen( "data.txt" , "rt" ) と指定すると、 プログラムの保存しているディレクトリと同じ場所から、"data.txt" を 探そうとする。(相対PATH)

しかし、別のディレクトリにあるデータを読む場合には、 場所を明記するために、Z:\directory\data.txt のように、 ルートディレクトリからの場所(Windowsではドライブ名付きで)を 指定する。(絶対PATH)

ただし、Windows でのディレクトリ区切り文字 '\' は、C言語の文字列内では、 特殊文字を指定する時に使われる。このため、文字列内では \\ の様に 書く必要がある。

 fp = fopen( "Z:\\directory\\data.txt" , "rt" ) ;

この場合、"\\"と2重で書くことで、Unix と Windows のプログラムの 書き換えが必要となるのを防ぐため、上例は、Unixのディレクトリ区切り文字"/"を使って、以下のように書いても良い。

 fp = fopen( "Z:/directory/data.txt" , "rt" ) ;

北陸地区高専体育大会

1607100515_640x348.jpg

出来の悪いフィッシング

かなり酷い出来のフィッシングメール。

だけど、発信元は「工◯院大学」の学生アカウントっぽい。 宛先の欄には、「久留◯大学」の名前があって、 大学系のメールアドレスを集めてメールを飛ばしている。

同じように自分のアドレスでも偽装メールが飛んでると 思うと不気味過ぎる。

1606290841_616x567.png

太陽電池測定システム

短期留学生の Joi さんが来校中。 自国でのプログラミングでは、色々と経験がありそうだったので、 当初予定していた実験課題は簡単に終わってしまう。

そこで、少しづつ説明を加えながら、レベルアップしてもらった。

当初は、組み込み系の開発経験が無いとのことだったので、 Arduino で太陽電池の観測システムを作ろうというのが、 ことの始まり。

でも、Arduino + Processing(PC)での観測は、簡単に完成。

そこで、Raspberry-Piを出してきて、継続的に観測するシステムに 予定変更。Raspberry-Pi と Arduino を接続して動かす実験を 体験してもらい、それを記録させる。

さすがに記録させてグラフ表示まで作ろうとすると時間が 足りないので、この部分は Raspberry-Pi に munin をインストールし、 サクっと動かしてもらう。

といっても、Arduino と接続する処理で、シリアルポートの 読み書き権限やら、munin から呼び出される時の、読み書き権限に ついては、分かりにくいので私がサポートした。

1606281604_497x280.png
1606281604_2448x2448.jpeg

情報処理センターのパスワードの失効対策

総合情報処理センターでは、2015年4月にシステムの更新を 行いましたが、稼働からほぼ400日を経過し、学生アカウント では、パスワードの有効期限から変更の警告が届いていたり、 アカウントロックとなったと表示される場合があります。

有効期限の警告の場合

通常ユーザが教育システムのパスワードを変更する場合は、 下記のURLにアクセスしてください。

 https://kauthsv.fukui-nct.ac.jp/iumus/
1605201226_596x285.png

このページは、学内からしかアクセスできません。

アカウントロックされている場合

総合情報処理センターにパスワードロックの解除を依頼して ください。解除後に伝えられるパスワードは暫定パスワード ですので、上記「有効期限の警告の場合」と同様に、 パスワードの変更を行ってください。

年度初めにパスワード変更を…

本校では、パスワード有効期限が400日となっていますので、 ほぼ1年間(+猶予期間一ヶ月)となります。つきましては、 年度始めにには、必ずパスワード変更をするようにお願いします。

Google検索をPerlでやってみる

卒研でデータ検索のプログラムを作ってもらおうとしているが、 Google Search API などは、1日100回制限もあるので、 少しマナーが悪いけど、LWPでアクセス。 UserAgent が libwww-perl だと検索を拒否されるので、一工夫。

#!/usr/bin/perl
use LWP::Simple ;
use Jcode ;
########################
# LWP でアクセス       #
########################
# ユーザエージェントを libwww-perl から変更しないとGoogleに拒否される。
my $ua = LWP::UserAgent->new(
   agent => 'Mozilla/5.0 (Windows NT 6.1; WOW64;
      Trident/7.0; NP06; rv:11.0) like Gecko' ) ;
# 問い合わせ文字
my $query = '猫 OR ネコ' ;
# 問い合わせ文字をURLエンコード
$query =~ s/([^ 0-9a-zA-Z])/'%'.unpack('H2',$1)/eg ;
$query =~ s/ /+/g ;
print $query."\n" ;
# 問い合わせのURLを作る
my $query_url = 'http://www.google.co.jp/search'
.'?hl=ja&q='.$query.'&lr=' ;
print $query_url."\n" ;
# 問い合わせを実行
my $response = $ua->get( $query_url ) ;
# 問い合わせ失敗時の処理
die $response->status_line
   unless( $response->is_success ) ;
my $content = $response->content ;
################################
# 検索から必要な情報を抜き出す #
################################
# 参考: http://dqn.sakusakutto.jp/2010/06/perlhtml.html
use HTML::TreeBuilder ;
my $tree = HTML::TreeBuilder->new ;
$tree->parse( $content ) ;
my @items = $tree->look_down( 'class' , 'st' ) ;
foreach my $item ( @items ) {
   print "-------------\n" ;
   print $item->as_text."\n" ;
}
### Local Variables: ###
### mode: perl ###
### End: ###

体育祭頑張れ!

1604300924_320x240.JPG

WiFiをつかめない…

最近、職場のWiFi環境が良くない。

たくさんのWiFiルータが立ち上がりすぎて、 アンテナの取り合い状態となっているみたい。

1604300827_1334x345.png

体育祭応援団の衣装作り

1604212122_320x240.jpg

システム

最新の投稿(電子情報)

最近の投稿(斉藤 徹)

アーカイブ

カテゴリー