|
[No.10 C言語 一文字入力、プログラムって?流れって? ] [No.11 Excel使いに負けた日...ワークシート関数TRIM編] [No.12 Access97 SP_CNV変更依頼...を題材にして] [No.13 C言語 制御文IFその1 and 昔の話...] [No.14 第二回 反省会?反響ランキング と クリック広告について] |
| No.10 | 1999/11/07 C言語 一文字入力、プログラムって?流れって? |
[ページTOPへ戻る] |
<C言語 一文字入力、プログラムって?流れって?> 目次 1.はじめの挨拶 2.お前は、ソフトバンクのまわしものか? 3.一文字入力 4.プログラムって?流れって? 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ C言語の解説を待っていた方、お待たせしました。 今回、一文字入力とIf文を解説します。 サンプルや解説にキレがなかったら、 遠慮なく、ほどほどに、指摘メール・質問メール下さい。 ^^^^^^^^^^^^^^^^^^^^^ ↑日本語、変じゃねぇか? あっ、大丈夫・大丈夫、、今回の解説より変じゃないから、、、 わかったから、さっさと始めろよ、、、ハイ。 /* * 2.お前は、ソフトバンクのまわしものか? */ フリーのC言語コンパイラー、 LSI C-86 v3.30c 試食版、 C MAGAZIN(ソフトバンク)の付録CD中に としか、書きませんでしたが、 下記の場所から、ダウンロードできますよ とメールをいただきました。 エル・エス・アイ ジャパン株式会社 LSI C-86 v3.30c 試食版 http://www.lsi-j.ab.psiweb.com/freesoft/index.html もしかして、Cマガ買ってしまった人、ゴメンナサイ。 でも、雑誌の記事、何かの役に立ったでしょ。。。 おいおい、開き直ったよ、、手がつけられないなぁもう。 正気に戻って、先に進みます。 /* * 3.一文字入力 */ いきなり、 一文字入力のサンプルを以下に記述します。 ( hosoku/010/test10.lzh にサンプル置いておきます ) ここでは標準関数getch()を使用しています。 filename : D:\NO10\TEST10_1.C 1: /* 2: * 一文字入力 3: */ 4: #include5: #include 6: 7: /* メイン処理 */ 8: int main() { 9: 10: char moji; /* 文字変数宣言 */ 11: 12: moji = getch(); /* 1文字入力 */ 13: printf("入力された文字は[%c]です\n", moji); 14: printf(" codeは16進[%x] 10進[%d]です\n", moji, moji); 15: printf(" codeは16進[%X] 10進[%d]です\n", moji, moji); 16: 17: return 0; 17: } 実行結果までの道のり、、、 まず、ソースファイルをメモ帳などで、作成します。 次に、DOSプロンプトから、前回作成したバッチファイル、 SETCを起動して、環境をセットします。 (Autoexecに組み込んだ人は、やらなくて、OKです) D:\NO10>c:\setc D:\NO10>PATH=C:\lsic330c\BIN;C:\WINDOWS;C:\WINDOWS\COMMAND D:\NO10>set TZ=JST-9 次に、lcc test10_1.c と入力し、リターンキーを押します。 ソースファイルがコンパイルされます。 D:\NO10>lcc test10_1.c lld @link.i 完成後、test10_1 リターンで、プログラムを実行します。 D:\NO10>test10_1 何か、キーを押すと、下記のようなメッセージがでます。 (ここでは、tキーを押した) 入力された文字は[t]です codeは16進[74] 10進[116]です codeは16進[74] 10進[116]です 解説 ア.インクルードファイルの指定 ここでは、標準関数、printfとgetchを使用しているので、 4: #include 5: #include 対応した、 , を指定します。 えっ何なんで? 標準の関数を使うときは、指定しないといけないんですよ。 そうなんだ、、とりあえず、決まりごととして、おぼえておくよ。 どうも。 あっ、なんで、getchって関数?だと、conio.hが必要ってわかるの? う〜ん、、、マニュアル・サンプルを見ると、書いてあるので、 対応するヘッダファイルを選んでください。 何か関数一覧なんて、あると、嬉しいんだけどなぁ、、、 暇見て、探しておきますよ。 ヨロシクネ。 イ.変数の定義 キーボードから文字を受け取りたいので、 10: char moji; /* 文字変数宣言 */ で、Char型の変数mojを定義します。 ウ.キーボードから、一文字受け取る getch関数を使用して(getchのリターン値で)、 文字を受け取ります。 12: moji = getch(); /* 1文字入力 */ 変数mojiにgetch()の処理結果(キーコード)が入ります。 エ.結果表示 結果を画面に表示します(変数mojiの中身を画面に出力) 13: printf("入力された文字は[%c]です\n", moji); 14: printf(" codeは16進[%x] 10進[%d]です\n", moji, moji); 15: printf(" codeは16進[%X] 10進[%d]です\n", moji, moji); これから、よく、お世話になるprintf関数で、結果を画面に出力します。 %c --> コードに対応する文字を表示 (キャラクタコード表って、みたことありますか?) %x --> 16進数で値を表示 %d --> 10進数で値を表示 簡単に書くと、こんな感じです。 枠外解説・グチ -- おおスゴイと感動しましたか?面白いですか? 実際にやってみて、スゴイと感動しましたか? 感動まではいかなくても、好きですか?面白いですか? いろいろな人に教えていて、わかりますが、 コンピュータが好き・プログラムが好きなヤツ・お嬢ちゃんほど、 飲み込み速いし、できるプログラマーになっていく気がします。 給料もらってやっているだけの職業プログラマー?だと、 なんか仕事も事務的なような。。。 いつも、遊んでいるテメエ(Ken3)より会社のためになってるって、、、 ごもっともなご意見です。。。 /* * 4.プログラムって?流れって? */ プログラムって言うと、何を思い浮かべますか? 競馬のレーシングプログラム、、、運動会のプログラム、、、など、、、 運動会のプログラムなどは、順番に上から下に進んでいきます。(競馬の出走順も) ・開会式 ・100メートル走 ・玉入れ ・昼休憩 ←あれ、もう昼? ・リレー ・閉会式 ←もう、終わり、、、騎馬戦ないの?...気にしないで、、 開会式から閉会式まで、上から下に、流れていきます。 一文字入力のプログラムも、下記のような順序で、流れてます。 ・変数の定義(開会式?) ・一文字入力 ・結果表示 ・return 0; (閉会式?) と、一直線に流れてました。 まぁ、通常は、そんな感じですが、 いつも同じことをするほど、(いつも同じじゃ、使えないでしょ) プログラムは甘くなく、 変数の状態によってやること変えたり、(腹へったから、玉入れ中止、昼にする?) 繰り返したり、流れを組み合わせます。 ア.基本は、上から下に流れます。 運動会のプログラムのように イ.分岐する場合 高校野球などのコールド試合(ルール知らないので、細かい点差、間違ってたら、、) 通常は、1回から9回まで進みます。 1回 2回 ・ ・ 5回 ここで点差が10点以上ならコールドゲームで試合終了 ・ ・ 9回 得点の多いチームの勝ち 同点の場合は延長戦へ 10回 どちらかが、多く得点を取るまで続く ・ ・ 18回 引き分け再試合 など、ある条件(ここでは、イニング回数と得点差ですね) で実行する作業(コールドなのか、、延長なのか、、再試合、、) を判断する。 ウ.繰り返し 分岐と似ているのですが、繰り返し処理で(無限ループもある?) 表現悪いですが、今風のたとえ話で、 ストーカー君が好きな子に start ↓ 付き合ってください ↓ イヤダ ↓ ここで彼女は考える、そろそろ、警察につきだそうか、家族にそうだんするか (10回ぐらい付きまとわれた、、警察に相談-->ストーカー君end逮捕) ↓ startへ戻るを繰り返す... (まったくストーカーってヤツは..頭の中の判断がおかしい、、、なんてね) まぁ、冗談ですが、プログラムは、どんなものでも、 処理の流れ、分岐の繰り返し、組み合わせだと思います。 なんか、少し、ズレてる気がするけど、 今後のIf,while,forの講座を読んだ時、思い出してください。 /* * 5.おわりの挨拶 */ メルマガで、図が書けないのが、ツライ。 図が書ければ、もうすこし、わかりやすく、説明できたんだけど。 じゃ、ホームページにGIFで載せたらイイジャン。 まだ容量、あまってるでしょ。 すぐわかる、言い訳こくなよコラ。 あっ、バレました?やっぱ。 実は、時間が無かったんですよ。。。すみません。次回は。。。 客先についたウソ・言い訳も、バレます、すぐに、、、 相手もそんなにバカじゃないんだし、、、 正直に話したほうが許してくれるかも? (絶対に、許してくれないほうが多いと思うけど、、、) 新人君のついたウソも先輩にバレます(←これホント、新人さん達は注意してね) Ken3「テストした?」 新人 「はい、しました」 Ken3「ハイ、これやり直し」(心の中で、うそつくなよ..真剣さが足りないんだよ) ここでガツンと言いたい三流プログラマーのKen3でした。。。 では、また。。。 次回は、言い訳しないように、ガンバル(つもりです)
| No.11 | 1999/11/08 Excel使いに負けた日...ワークシート関数TRIM編 |
[ページTOPへ戻る] |
<Excel使いに負けた日...ワークシート関数TRIM編>
目次
1.はじめの挨拶
2.それは、土曜出勤のことだった
3.「ExcelのTrim関数でできるよ」そんなバカな、、
4.飲み会でも、技術話?
5.おわりの挨拶
----------------------------------------------------------------------------
/*
* 1.こんにちは
*/
こんにちは、今週も、始まりますね。(平和な一週間でありますように、、、)
今回は、先週土曜日、
Excel使いと戦って、負けた?ことを中心に書いていこうと思います。
*↑隣の部(データサービス)のやさしい部長さんです。
負けたのに、飲み代も1000円だったしねぇ。
原因は、思い込みだったけど、、、う〜ん、くやしい。
前置きは、これくらいにして、そろそろ、始めます。
/*
* 2.それは、土曜出勤のことだった
*/
先週、土曜日、出勤してました。
システム課のメンバー帰ったし、
一人になったので、メールチェックを行う。
*まったく、会社の設備を使って、、、とんでもないヤツだ。。。
おっ、メール来てるジャン。(チョット嬉しい)
なになに、がんばってください、、ハイ、ガンバリマスヨなんとか、
次は、
>SP_CNV.MDBで姓と名の間に
>半角スペースが複数存在(3個以上)する場合
>全角スペースと半角スペースが混在する場合
>全角スペースが複数存在(2個以上)する場合
>はどう処理すれば良いでしょうか?
>お知恵をお貸し下さい。
あっ、やられた、、、データの想定ミスだぁ。。。
確かに、半角スペースが3つだと、全角2つになってしまう。。
例)匿名 希望-->匿名□□希望
となってしまう。
ちぇ、またミスっちゃったなぁ。まぁいっかと思いつつ、帰る準備をする。
隣のデータサービス課(データパンチ関係の仕事してます)に
システム課帰りますと挨拶をしに行きました。2名まだ残ってました。
部長「あかしやき3人で食べに行かない?」と飲みの誘い。
何を思ったか、部長・スパーバイザーさんに、
「データ処理関係で、姓名間全角スペース一個とか指定って、よくあるんですか?」
と聞いたところ、
SP「よくあるよ、半角スペース2個じゃなくて、全角1つにしてとか」
と答えが返ってきました。
ここでやめときゃいいのに、
「半角の変換プログラムサンプルで作ったら、半角3つ入った時、処理できなくて」
と話を続けてしまった、、、
隣に座っていた、部長が一言、
「ExcelのTrim関数でできるよ」
と悪魔のささやき???(ほんとは、親切なので、天使の助言かな?)
これが、長い土曜日の始まりだった、、、
/*
* 3.「ExcelのTrim関数でできるよ」そんなバカな、、
*/
心の中、で、できないでしょ、Trim関数じゃ、、、左右のスペース取るだけじゃないの?
と思い、「trimって、左右のスペース取るだけじゃないの?」と言葉の砲撃?
部長「じゃ、やってみよう」とパソコンの電源を入れる。
しばらくするとWin98のロゴ、
Excelを立ち上げて、データと関数を入れる。
A列 B列
1 匿名 希望 =trim(a1) --> 匿名 希望
2 匿名□□希望 =trim(a2) --> 匿名□希望
あっ、なんで中のスペースが取れるの?と驚く。。。
心の中では、絶対できない、、、飲み代カケてもいいと思っていた。
(カケは勝って負けても嫌いなので、普段はやらないのですが、
そんな私がカケけたくなるほど、自分の中では絶対の自信だった)
動揺しつつ、「半角3つを全角1つにしたいので」と言ってしまった。
Excel使いの部長には、なんでも無い攻撃で、
「=jis(trim(a1))でできる」
とあっさり、返された。
おみごと、、、でした。。。
Excel使いに負けた、、、と思いながら、飲みに行く。。。
枠外開設・グチ --- 思い込みとExcelワークシート関数
Excelワークシート関数とVBAの関数、
同名の関数でも動作が違うみたいです。
みなさんも、変な思い込みは無くして、相手の言葉を良く聞きましょう。
飲み代、カケなくてよかったなぁ、、、ほっとしてます。
だから、テメエは(思い込みの激しいKen3は)、
勝負ごと弱いんだよ。
ハイ、了解。ゴメンネ。
ちなみに、VBAだと、真中のスペース取れません、安心?してください。
Sub Macro1()
Dim a As String
a = "匿名 希望"
MsgBox Trim(a)
End Sub
だと、中のスペースはそのままで、表示されます。
Excelのテスト
VBAテストモジュール
テストのブックはここから
hosoku/011/index.html
/*
* 4.飲み会でも、技術話?
*/
普通なら、3の敗戦で、マルマガ終わるんだけど、
飲み会でも技術話?の続きありました。
飲んでる時、やさしい部長より、
Excelで不思議な、質問、ありました。
IF(B5>"17:00","残業","")
だと、判断できないと、、、
って、飲んでる時、言われてもなぁ...
B列 C列
5行 18:00 =IF(B5>"17:00","残業","")
6行 18:00 =IF(B6-"17:00">0,"残業","")
7行 18:00 =IF(B7>"17:00"+0,"残業","")
8行 18:00 =IF(B8>time(17,0,0),"残業","")
5行目の=IF(B5>"17:00","残業","")
ですんなり、できないみたいです。
なんか、あってる?ぽいけどなぁ。
で、
苦肉の策?で、
6行目の=IF(B6-"17:00">0,"残業","")
みたいに、17時を引いて、0以上だったら
に式を変更したらうまくいったらしいです。
また、7行目みたいに、+0(なんで0たすの?)
を入れると、思い通り、動作します。
その時、飲んでたので(言い訳?)
#17:00#と囲えば、=IF(B5>#17:00#,"残業","")
日付型になるからOKでは
と答えたのですが、本日、やってみたら、これは、ウソでした。
*#はVBAだけみたいです、、、ワークシート上はエラーになります。
お返しをしようと、#で囲うを教えたんだけど、、また、裏目でした。
だから、確認してから、答えようよ、、はいはい。。。
話は、戻って、
キレイ?に書くと、8行目のTime関数を使って、
時間(シリアル値)を返して、比較するのが良いみたいです。
"17:00"だけだと、時間と文字列を比較するので、ダメ。
b5(時間) - "17:00"(文字列)は、自動的に時間の引き算してくれるのでOK
"17:00"(文字列) + 0(数値)は、なぜか結果が時間になる?のでOK
お行儀よく書くなら、Time関数を使ってtime(時,分,秒)を使います
*VBAのタイム関数とは、動作が違うので、注意してください。
枠外解説・グチ -- Excel97...もう少し賢ければ、、
Excel2000だと、=IF(B5-"17:00">0,"残業","")で良いかもしれないので、
インストールしている人は、結果、教えてください。
ken3のExcel97では、ダメでした。
VBA 日付型 (Date) ヘルプから、引用
---
日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。西暦
100 年 1 月 1 日〜西暦 9999 年 12 月 31 日の範囲の日付と、0:00:00 〜 23:59:59 の
範囲の時刻を表すことができます。日付型の変数には、日付リテラルとして認識可能な任
意の値を代入できます。日付リテラルの形式は、#1993 January 1# または
#93 Jan 1 # のようにシャープ記号 (#) で囲む必要があります。
ワークシート関数 TIME のヘルプから、引用
----
指定された時刻に対応するシリアル値を返します。計算結果のシリアル値は、0 〜 0.
99999999 の範囲にある小数値で、0:00:00 (午前 0 時) から 23:59:59 (午後 11 時
59 分 59 秒) までの時刻を表します。
書式
TIME(時, 分, 秒)
時 時を表す数値を 0 〜 23 の範囲で指定します。
分 分を表す数値を 0 〜 59 の範囲で指定します。
秒 秒を表す数値を 0 〜 59 の範囲で指定します。
使用例
ダブル クォーテーション (") は、戻り値が文字列であることを表します。
TIME(12,0,0) = 0.5 (正午に対応)
TIME(16,48,10) = 0.700115741 (午後 4 時 48 分 10 秒に対応)
/*
* 5.おわりの挨拶
*/
長い?土曜日が終わって、日曜日、メルマガ書いてます。
ぜったいできる、、、と言って飲み代かけなくて、
よかったなぁ、、の結果レポートでした。
*何かの参考になれば、幸いです。。。
なんか、疲れが貯まったような。
まぁ、飲み代1000円で、いろいろな発見あったし、良かったかな?
でも、飲んでる時は、楽しい話をしましょうよ、、技術話じゃなくて。
やさしい部長に感謝の三流プログラマーKen3でした。。。
では、また。。。 次回は、Excel使いに勝った話をしたいですねぇ。
*今度は、今風・流行り言葉のリベンジだぁ〜、、、と変な気合を入れる。
返討ちにあわないでね、、、はい。。。
| No.12 | 1999/11/09 Access97 SP_CNV変更依頼...を題材にして |
[ページTOPへ戻る] |
<Access97 SP_CNV変更依頼...を題材にして>
目次
1.こんにちは
2.現バージョンの考え方と問題点
3.問題点を考慮した、新バージョン
4.おわりの挨拶
----------------------------------------------------------------------------
/*
* 1.こんにちは
*/
こんにちは。
匿名さんより、Access関係で出したサンプル、
SP_CNVの質問、いただきました。
質問内容
>漢字の時は「匿名 希望」姓と名の間は全角スペース一つで、半角(ア
>ルファベットの場合(Tokumei Kibou)、半角カタカナ(トクメイ キ
>ボウ(半角カナだと文字化けしますので、全角で表記します))の場合
>は姓と名の間に半角一つにする場合のやり方を教えて下さい。
>お願いします。
今回は、これを題材にして、
いつものように、AB型で気分屋のKen3が、一人二役で回答します。
*別なやり方を思いついた人、
イヤこれは違う、、と一緒に毒舌したい人は、
メール送ってください。
またまた、C言語から離れてしまった、、、、、、、
/*
* 2.現バージョンの考え方と問題点
*/
No.006で書いたサンプル、簡単に説明します。
----
Public Function SP_Cnv(moji) As String
Dim n As Integer
Dim RET As String
Dim ChkString As String
RET = "" 'リターン値の初期化
'文字数分ループする
For n = 1 To Len(moji & "")
ChkString = Mid(moji, n, 1)
If ChkString = " " Then '半角スペースかチェック
RET = RET & " " '全角スペースをプラスする
If Mid(moji, (n + 1), 1) = " " Then '次の文字がスペースがチェック
n = n + 1 'ループカウンタを小細工
End If
Else
RET = RET & ChkString 'スペース以外の時、そのままプラスする
End If
Next n
SP_Cnv = RET
End Function
----
関数の処理イメージとしては、
受け取った文字を左から1文字毎調べ、
半角スペースなら、全角スペースに置き換えます。
同時に、半角2個を全角1つにしたいために、
次の文字が半角か、チェックして、半角の場合、文字を飛ばしています。
----
この方法だと、以下の問題点か発生します
ア.半角スペースが3つの時、間の全角が2つになってしまう
例)匿名 希望 --> 匿名□□希望
123
あっ、あれ、、、なんで?
アレじゃねえだろ、、、データが半角1つか2つとしか考えてねぇから、
3つの場合、全角2つに変換されちゃったんだろ、、、
もっと、実際のデータは汚い?って考えなきゃ
イ.せっかく英字は変換されないのに、スペースは全角になる
英字や半角カナを漢字に変換したくないために、
strconv(a,vbwide)関数使わないで関数を自作しているのに、
間のスペースが全角になってしまう
例)Kibou Tokumei --> Kibou□Tokumei
あっ、良く考えたら、抜けてますね。
抜けてますねじゃねぇだろ、、、チョット考えれば(使用者の立場になって)
わかるだろ、、、
/*
* 3.問題点を考慮した、新バージョン
*/
う〜ん、、データって、奥が深いな、、と思いつつ、
問題点を考慮した処理を考える。
---
発想を半角スペースを見つけたら、全角スペースに置き換え処理をしよう
から
半角・全角スペースどちらか見つけたら、
氏名を、姓と名に分ける
間に半角・全角どちらを入れるか判断するために、
一番左側の一文字を取りだし、サイズを判断。
サイズが1なら、半角カナ・英数字と判断し、
半角スペースに、、2バイト(漢字)なら全角スペースにする
間に一つスペースを+し、文字列を完成させる。
に発想を変えます。
下記に変換後のサンプルを載せます。
--- ホームページに圧縮して置いておきます。よかったらダウンロードしてください。
Public Function SP_Cnv(moji As Variant) As Variant
Dim n As Integer 'ループカウンタ
Dim RET As Variant 'リターン値
Dim ChkString As String 'チェックする文字
Dim strSEI As String '姓
Dim strMEI As String '名
Dim strSPC As String 'スペース
RET = moji 'リターン値の初期化
'文字数分ループする 途中で、スペースが現れたら、分割処理を行う
For n = 1 To Len(moji & "")
ChkString = Mid(moji, n, 1)
'半角スペース 及び 全角スペースかチェック
If ChkString = " " Or ChkString = " " Then
'姓名を分ける
strSEI = Trim(Left(moji, n)) '左からn文字切り取り、空白を取って代入
strMEI = Trim(Mid(moji, n, 255)) 'n文字目から255文字切取り空白を取る
'漢字で入力されているか、チェックし、スペースの種類を判断
'左側の一文字を取りだし、バイト数を判断、、、
If LenB(StrConv(Left(strSEI, 1), vbFromUnicode)) = 1 Then
strSPC = " " '半角スペースを代入
Else
strSPC = " " '全角スペースを代入
End If
RET = strSEI & strSPC & strMEI 'スペースをプラスし、リターン値を作る
Exit For '処理を抜ける
End If
Next n
SP_Cnv = RET
End Function
---
で、できるの?
た、たぶん。。。できます。
今、言っていい?
はい、どうぞ、
3つに区切られてたら、どうなるの?
例)Tokumei Kibou Desu
氏名なんだから、、日本人は大丈夫でしょうキット。。。
*サンプル作ってから、また、気が付きました。
---
newconv.lzh
---
枠外解説・グチ -- LenB , Unicode
a="漢字"
? lenb(a) --> 4バイト、、当然でしょ
b="KA"
? lenb(b) --> 4バイト、、なんで?
私、ハマリましたが、有名な話みたいですね。
?マークの人は、Unicode、ヘルプで見てください。
勉強になりますよ。。。
なんでテメエが解説しないんだ、あっ、手間取りそうだからだろ?
バレました、、、今日はこのへんでカンベンしてください。。。
(どうしても?の時は、メールでリクエストしてください)
PS. IsNull関数があって、IsKanji関数が無いのは、、
作ってほしいなぁ、、それとも、私の見落とし?
/*
* 4.おわりの挨拶
*/
素朴な疑問、これは、コッチの方がいいですよなどのアドバイス、
何かありましたら、気軽に
まで、メール下さい。
新たな、毒舌まってます。 Ken3より
では、また。。。
次こそは、Cの講座(If)始めるぞ、、、
*おいおい、いまさらそんなこと言っても、みんな、あてにしてないって....
Access VBAこのまま続けたほうがいいって、
そのうち言われるよキット。。。
| No.13 | 1999/11/10 C言語 制御文IFその1 and 昔の話... |
[ページTOPへ戻る] |
<C言語 制御文IFその1 and 昔の話...> 目次 1.はじめの挨拶 二兎を追うものは、一兎も〜 2.if文の文法? 3.if文(条件分岐) 例)文字の判断 4.if,else文(条件分岐) 例)Y,y の判断 5.おわりの挨拶 ---------------------------------------------------------------------------- /* * 1.こんにちは */ C言語の解説を待っていた方、お待たせしました。 やっと、今回、制御文Ifの一回目?を解説します。 サンプルや解説にキレがなかったら、 遠慮なく、ほどほどに、指摘メール・質問メール下さい。 ^^^^^^^^^^^^^^^^^^^^^ AccessやVBAの方が興味がある? そんなこと言わないで、こちらのほうも、見てください。 *C言語興味がない方は、グチ・激論?だけでも読んでください。 オマエ、二兎を追うものは、一兎も〜。。。って言葉知ってる? 知ってるよ、、、う〜ん、、今後、どうしよう? まぁ、先のことは、後で考えましょう、、、そろそろ、始めよ。。。 /* * 2.if文の文法? */ if文のイメージを下記に書きます。 *コレだけじゃないんだけど、、、数回に分けて説明します。 if文の文法 if( 条件 ) { 条件が真の時 } else { 条件が偽の時 } if(a==10) { printf("aは10です"); } if(a < 100) { printf("100未満です"); } if(a == 5 && b == 7) { printf("aが5でbも7です"); } if(a == 5 || b == 7) { printf("aが5 か bが7 です"); } && −−−> AND || −−−> OR == −−−> = < <= > >= != って、ざっと書いても?マークだと思うので、 今回から数回、サンプルを説明するので、感じを感覚でつかんでください。 /* * 3.if文(条件分岐) 例)文字の判断 */ 一文字入力して、入力された文字を判断し、 結果を画面に表示させます。 filename : D:\NO12\TEST12_1.C ----- 1: /* 2: * if文(条件分岐) 3: * 例)文字の判断 4: */ 5: #include6: #include 7: 8: /* メイン処理 */ 9: int main() { 10: 11: char moji; /* 文字変数宣言 */ 12: 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 15: 16: /* 数字判断 */ 17: if('0' <= moji && moji <= '9') { 18: printf("この文字は数字です\n"); 19: } 20: /* abc..判断 */ 21: if('a' <= moji && moji <= 'z') { 22: printf("この文字はアルファベットの小文字です\n"); 23: } 24: /* ABC..判断 */ 25: if('A' <= moji && moji <= 'Z') { 26: printf("この文字はアルファベットの小文字です\n"); 27: } 28: return 0; 29: } ----- 実行結果 入力された文字は[5]です この文字は数字です ----- 簡単な解説 11: char moji; /* 文字変数宣言 */ キーボードから文字を受け取るため、変数を定義します。 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 標準関数Getchを使用して、一文字受け取ります。 16: /* 数字判断 */ 17: if('0' <= moji && moji <= '9') { 18: printf("この文字は数字です\n"); 19: } ここでは、入力された文字が0以上9以下か、ききます(判断します) ポイントは、'0'とシングルコーテーションで囲っているところです。 詳しくは、後日説明するので(またかよ)、 なんとなく、イメージでおぼえてください。 20: /* abc..判断 */ 21: if('a' <= moji && moji <= 'z') { 22: printf("この文字はアルファベットの小文字です\n"); 23: } 同様に、入力された文字がa〜zかききます(判断します) 24: /* ABC..判断 */ 25: if('A' <= moji && moji <= 'Z') { 26: printf("この文字はアルファベットの大文字です\n"); 27: } 同様に、入力された文字がA〜Zかききます(判断します) 簡単に書くと、こんな感じです。 枠外解説・グチ1 -- 「きく」ってなに? なにげなく、AがNullかきいて、その結果で判断、、、 なんて、会話してるけど、新人さんにとっては、???みたいですね。 先輩達の会話が違和感なく聞けるようになったら、一人前?。 コンピュータに聞くわけじゃないのに、ねぇ、、、 あっ、もしかして、うちの会社だけの方言?で、 一般的なソフト会社は、普通に もし、AがNullだったら...とわかりやすい標準語シャベルノカナぁ? 会社によっての方言、、、いろいろありそうで、面白いかも? テメエはナマリがひどすぎるって、、、ハイハイ。。 標準語話すように、努力しますよ。。。 枠外解説・グチ2 -- 不等号の書き方、、、 これも、私の、変なクセの話ですが、 aが20〜の時を普通の人が書くと、 if( a > 20 ) { なのですが、私の場合、 if( 20 < a )とよくします。 逆の20より下は、みなさんと同じで、 if( a < 20 )です。 >向きの不等号、、なぜか、嫌いなんですよ。 例題で、 if('0' <= moji && moji <= '9') { // 0よりmojiが大きく9より小さい と書きましたが、 if(moji >= '0' && moji <= '9') { // mojiが0より大きく9より小さい とちらも、大差ないのですが、なんか<の向きをそろえるへんなクセついてます。 教科書の書き方は、変数 比較演算子 定数 ですよねキット。 さすがに、 if( 0 == a ) とは書きませんが、、if( a==0 )ですね。。 みなさんは、どうでしょうか? 面白い話、あったら、聞かせてください。 /* * 4.if,else文(条件分岐) 例)Y,y の判断 */ filename : D:\NO12\TEST12_2.C ----- 1: /* 2: * if,else文(条件分岐) 3: * 例)Y,y の判断 4: */ 5: #include 6: #include 7: 8: /* メイン処理 */ 9: int main() { 10: 11: char moji; /* 文字変数宣言 */ 12: 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 15: 16: if(moji == 'Y' || moji == 'y') { 17: printf("入力されたのはYです\n"); 18: } else { 19: printf("Y以外の文字が入力されました\n"); 20: } 21: return 0; 22: } ----- 実行結果 入力された文字は[y]です 入力されたのはYです ----- 簡単な解説 11: char moji; /* 文字変数宣言 */ キーボードから文字を受け取るため、変数を定義します。 13: moji = getch(); /* 1文字入力 */ 14: printf("入力された文字は[%c]です\n", moji); 標準関数Getchを使用して、一文字受け取ります。 16: if(moji == 'Y' || moji == 'y') { 17: printf("入力されたのはYです\n"); 18: } else { 19: printf("Y以外の文字が入力されました\n"); 20: } 入力された文字がY,yか聞きます (もし、変数mojiの中身が、Yかyだったら) メッセージprintf("入力されたのはYです\n");を出力します。 それ(Y,y)意外のときは、printf("Y以外の文字が入力されました\n"); と表示します。 文字・文字列について(後日)、詳しく解説したいと思います。 テメエの解説は、政治家みたいに、先送りが多すぎるよ、、 この場で決着つけてほしいなぁ、、、 かんべんしてくださいよ、、、 枠外解説・グチ --- 昔話を一つ、、、NEC98のカナキー、、、、 その昔、C言語で工場関係のシステムを作ってました。 (コンベアを動かして、RS−232Cから重量実績データを受け取る) で、「よろしいですか?(Y/N)」って、処理が実行前の確認で ありました。 プログラムを今回の説明みたいに、 if(moji == 'Y' || moji == 'y') { で組んでました。 オチ、わかった方もいると思いますが、 ある日、どうしても実行できないと問い合わせがあり、 電話対応でも原因がわからなくて、客先に行ってみました。 なんと、 カナキーが押してあり(ロックされていて) Yじゃなくて、ンが返っていたんですね。。。 *なんとなく、怒る気にもなれなかった、、、、 それ以来、Yes,No確認は、 if(moji == 'Y' || moji == 'y' || moji == 'ン') { // ホントはンは半角 するようになりました。 世の中、何が起こるか、わかりませんね。。。 *これも、テメエの想定ミスだろ、、、 /* * 5.おわりの挨拶 */ 今回、簡単なIfの例を2つでした。 説明よりもグチ解説のほうが長かった気もしますが、、、 今日は、このへんで、、、 では、また。 グチの多い(一言多い)三流PGのKen3でした。
| No.14 | 1999/11/11 第二回 反省会?反響ランキング と クリック広告について |
[ページTOPへ戻る] |
<第二回 反省会?反響ランキング と クリック広告について>
目次
1.はじめの挨拶
2.タイトルに偽りあり?ジャロに言うぞ・・・進め方編
3.Access97 SP_CONV編
4.今後、やってほしい、要望
5.クリック広告?について、、、相互リンク、広告?
6.おわりの挨拶
----------------------------------------------------------------------------
/*
* 1.こんにちは
*/
今回は、メールで送られてきた、感想・苦情・要望をまとめ、
第二回 反省会?反響ランキング の発表(お知らせ)
と
友人が始めたクリックするとお金が入る?(どんなしくみだ?)
について、、、書きたいと思います。
あっ、私も、まぐクリックに申し込んでしまった、、、
だから、人のこと、あまり言えないんだけど、、、
さて、変なのが出てこないうちに、はじめますか。。。
*変なのって?....始めての人は、バックナンバー見てからのほうが
わかりやすいかも。。。
/*
* 2.タイトルに偽りあり?ジャロに言うぞ・・・進め方編
*/
まず、始めは、細かい話ですが、
タイトルに偽りあり?ジャロに言うぞ・・・進め方編です。
このメルマガのタイトル
三流プログラマーのプログラム講座
なのですが、本人言うのも何なのですが、あまり講座、うまくないです。
*あれ、認めちゃうの?今日は、素直だねぇ、、、
また、どの言語がメインか、、、と質問されても。。。
メールでいただいたのが、
・C言語をやるのか、AccessやVBAをやるのか、ハッキリさせてほしい。
なんか、中途半端で読みにくい。
--->う〜ん、、、私が、集中力無いので、いろいろ手をつけちゃって、
混乱してる人は、すみません。
火曜日はC,金曜日はVBAなど、決めればいいのかもしれませんが、
このまま、来た話題を優先に続けていこうと思います。
・2・3日貯めて、濃いのを出したら
--->一瞬、変な想像したのは、私だけ?
そんなこと書いてると、女性読者無くすぞ、、
なんのこと?、二・三日考えて、内容の濃いメルマガにしてください
って、ことでしょ?
ダメだよ、変な想像しちゃ???
・教え方がヘタ、他のメルマガ見て、研究したら?
・私は、C言語できるので、なんとなくわかりますが、
はじめての人には、変数や書き方、コンパイルとは、
もっと丁寧に行ったほうが
--->他のメルマガみて、勉強?しました。
私のより、丁寧・親切に書いてあります。はい。
そちらで勉強して、ここも見るってのは、どうでしょうか?
私の悪いメルマガ・プログラムの作りを反面教師にしたり、
いろいろな見方があるんだなぁ、、と思っていただけると。
・愚痴解説をメインにしたら?タイトルも三流PGの愚痴にして
--->ははは、そうですよね。
説明はイマイチだけど、愚痴は面白いなんてメールもありました。
*タイトル、今のところ、このままで行きますが、
何かこのメルマガに合ったタイトル、ギンゴン!と思いついた方は、メール下さい。
あと、ジャロに言わないでね。。。
/*
* 3.Access97 SP_CONV編
*/
Access97のSP_CONVが変、、、いろいろ、ありました。
時間をさいて、サンプルくれたり、調べてくれたり。
みんさんには、感謝です。
これぐらいのサンプルプログラムでも、データの想定など、
いろいろあることを知っていただけたら、、と思います。
*読者より先に、テメエが勉強になっただろ、、、ハイ。
サタンさんより、SP_CNV関数の修正版をいただきました。
(テンシさんって書いてくれればいいのに、、、)
コメントの付け方や、変数名がプロっぽいと感じました。
おいおい、お前も、プログラム作って会社から給料、お客から金取ってんだから、
プロだろ、、もっとしっかりしろよ。。。はい。。。
以下、サタンさんのメールを引用します。参考にしてください。
*足りない部分を解説とありましたが、そのまま載せます。
この場をかりてサタンさんへ「どうもありがとうございます」
-----
・3つに区切られていた場合とか
・一文字ずつの空白のチェックとか
・255以上の文字列の場合とか
気になる部分をいろいろと改善して私が関数を作ってみました。
一応、関数名は変えておきましたが・・・。
Public Function xSP_Cnv(moji As Variant) As Variant
Dim n As Long '空白の文字位置
Dim strSPC As String 'スペース
Dim strMoji As String '編集文字列
Dim strLeft As String '空白より左側の文字列
Dim strRet As String 'リターン値
'文字列の前後の空白を削除し、最初の1文字目が漢字で入力されているかを
チェックし、
'スペースの種類を設定します。
If LenB(StrConv(Left(Trim(moji), 1), vbFromUnicode)) = 1 Then
strSPC = " " '半角スペースを代入
Else
strSPC = " " '全角スペースを代入
End If
strMoji = Trim(moji) '編集対象文字列に代入
n = InStr(StrConv(strMoji, vbWide), " ") '空白の文字位置をチェック
If n <> 0 Then
strRet = Left(strMoji, n - 1) '左からn文字切り取りリターン
値を作る
strMoji = Trim(Mid(strMoji, n + 1)) 'n文字目以降の文字をから空白
を取り編集文字列へ
Do While InStr(StrConv(strMoji, vbWide), " ") <> 0
n = InStr(StrConv(strMoji, vbWide), " ")
'空白の前後の文字列を分ける
strLeft = Left(strMoji, n - 1) '左からn文字切り取り、空白を
取って代入
strMoji = Trim(Mid(strMoji, n + 1)) 'n文字目以降の文字をから空白
を取り編集文字列へ
strRet = strRet & strSPC & strLeft 'スペースをプラスし、リター
ン値を作る
Loop
strRet = strRet & strSPC & strMoji 'スペースをプラスし、リター
ン値を作る
Else
strRet = strMoji
End If
xSP_Cnv = strRet
End Function
-----
モジュールを貼りつけるときは、コメントが改行されてるので、
注意してください。
次からの例題モジュールは、データとかエラー処理をよく考えて、
いいもの作ろう、、、
はじめからその心だったら、よかったのにね。
チョットできると思って、天狗になってんじゃないの?
そうかなぁ?
/*
* 4.今後、やってほしい、要望
*/
今後、やってほしい要望として、
・初心者をみすてないで ---> 私の教え方が悪くって、、見捨ててませんよ
・VCってなに? ---> 私もC++勉強しないと、、Cしか知らないんですよ
・mswinsck.ocx を使ったpop3メールチェッカー --> 難しそう、、できたら感動しそう?
・C++Builderを題材にして頂きたい ---> Ver1.0のCD会社で寝てるので起きたら?
・AccessからExcel/Wordをコントロールしたい ---> いいですねぇ、楽しそう?
・VC6.0を頭から、、 ---> どこを頭って言うのか、、、一緒にやりますか?
なんて、イロイロ要望をいただいてますが、
全てやりましょう?とは、言えないので、
落ち着くまでは、C言語・VBA・・いつもの業務関係をからめた愚痴
の三本柱で行きたいと思います。
VBA関係でこんなサンプルほしいなど、ありましたら、
メール送ってください。
/*
* 5.クリック広告?について、、、相互リンク、広告?
*/
長々と反響に付き合っていただいて、どうも。
ホント長いよねぇ、いつも。 ほっといてよ。。
話を本題に戻して、
友人が1クリックしたらポイントが貯まって、
お金がもらえるシステム(換金される)を始めました。
http://click.gaiax.com/home/kanaaki/main
暇な人は、ホームページの上の広告をクリックしてあげてください。
ヨロシクお願いします、では。。
って言って終わりじゃなくて、
ここからいつものKen3のモードです。
ここで、人間は、魔が差す(漢字いいのかなぁ?)
ヤクザが公衆電話から、変造テレカを使用して、
自分自身のQ2の番組に電話をかけて、
NTTからお金をむしりとるみたいに、
まず、自分でクリックしたら、どうなる?
を考えますよね。。。
その次に、友達同士で押し合ったら、どうなる?
さらに進むと、機械任せで、自動的にクリックできないか?
など、楽して儲けようと考えます。
まぁ、しょうがないかなぁ?
でも、広告主の人は、、、クリック数が上がっているのに、
売上が上がらない、、、バナー広告なんて、意味が無い、、、やめよう
と自然な流れになってしまうんじゃないかと、他人事ながら、心配です。
*毎日、せっせと自分のページクリックしたけど、
お金を換金する段階で、広告会社がツブレるとか、、、
**毎日クリックにかける時間で(時間で)
得られるお金を割ったら、時給いくらになるのだろう?
ヤクザみたいに、悪魔に魂をうって、
悪いことしないと、もうからないのでしょうね。キット。
で、終わればいいのに、何を思ったか、
悪魔の手助けツール(自動クリックツール)
できないか、昨晩、いろいろ試してしまった。。。
まだ、私の実力では、作れないので、安心でした。
*オイオイ、やろうとする心が問題でしょ。。。
マグマグにも、まぐクリックってのが12月から始まります。
ここでも、やめればいいのに、申し込んでしまった。
はやく寝れば、いいのに、システム屋さんのクセで(私個人のクセ?)
チョット疑問点を考えてみた。
ヘッダに配信するだけで、0.2円から0.5円....
えっと、読者数が今、おかげさまで900だから、
0.2*900で、一回180円か、、、
ここで、悪魔のささやき?
一回に送る量を減らして、一日2回配信しようか?
また、訂正号なんて、白々しく作って、同様の内容を配信し、二重取り?
まぁ、こんなメルマガは、読者からも見放されたり、タレコミ?
があって、廃刊でしょうねキット。
でも、正直者が本当に間違えて訂正号送りたかったり、
配信システムのミスだったら?
このへんのシステムは、どうなっているのだろう?
お前の考えは、小学生なみの、二期作(社会かなぁ?)か、、、
品種を改良して、1回に取れる量を増やす
(魅力あるメルマガで読者を2倍にする)
は、考えないのかよ。もっとマトモにさ。。。
広告主さんへ、このシステムは、メルマガを読む時、必ず開くので、、
チョット待った、、、必ず?どこかで、イタイ目みた言葉だなぁ。。。
こんなヤツ居ないけど、無料の転送アドレスを200個用意する。
自分自身のメルマガを登録し、メールボックスがあふれないように、
受信だけする。。。キタネエなあ。
じゃ無料アドレス5000個、0.2円で一回1000円かよ。
*まぁ、そんなに登録できないと思うが、
自動クリックシステムよりは、メルマガ読者自動登録は簡単そうだから、、、
Aさんは、メルマガを30誌取ってました。
同じ広告が入ってるんだよな、、なんてことは無いのかなぁ?
3000人に送ったつもりでも、実際に受け取る人は、100人*30誌だったりして
広告の効果って、、、まぁ、配送先のアドレスがダブらない、
システムができてるんだろうけどね。。。
*テメエが考えることは、一流のSEさんたちが考えてるから、
ヨケイナ心配しなくて、いいんだよ。
内容がツマラナくて、読者数が減る現実の心配したほうがいいんじゃない?
ごもっともなご意見です。
抜け道が無いように?して、広告主さんを大事に、
NTTみたいに、
公衆電話からはQ2ダメ(無料のアドレスの発送はカウントしない)
や
5000円のテレカ禁止(一回の広告料の上限は1000円)
みたいに、ならないことを祈ってます。
ここに書いてない、取っておきのウラワザ教えてくださいって、、、
そんなの無いよ、、、そんなの考えるなら、
面白いメルマガ作って、まともに稼ごうよ。
以上、ヨケイナお節介の独り言でした。
*テメエには、0.2円も儲けさしたくない、、、解除だ。。
そんなこと言わないで、、、、
/*
* 6.おわりの挨拶
*/
あと、少しで読者1000名行きます。
あまり、読者数、気にしていなかったのですが、
クリック関係で、少し考えさせられました。
減れば、ヤッパ、魅力無いんだし。。。
最近、感想メール減って、なんとなくサビシイような、
ほっとしてるような状態です。
が、今後、
良い方向に進めたいと思うので、
手が空いたときに、感想メール・毒舌メールいただけると、うれしいです。
次回の第3回反響メール報告会、、、どうなるだろう?
今日は、このへんで、、、
では、また。
次回は、3日ぐらい貯めてから、濃いのを出したいと思います。
あっ、濃い内容ね。。。 (一言多い)三流PGのKen3でした。