ドゥアイネットのプログラマー、湯川が開発日記を綴ります。

CALENDAR
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< December 2019 >>
ARCHIVES
CATEGORIES
文字コード判定その3
その3です。
以前「preg_match」関数で判定がうまくいったと書きました。

実はこれ長い文字列になると、判定されませんでした。
10000文字くらいを「preg_match」で判定しようとしたら
結果が返らずにタイムアウトになってしまいました時計

ちょっとずつ文字数を増やして、何文字(バイト)からダメなのかを調べました。
5000、6000、7000文字、まだ大丈夫です。8000文字これもOK。
9000文字!ここから結果が返ってこなくなりました。
8000文字でも処理時間が長いわけではなく、9000文字にしたら
結果が返らなくなりました。

環境のせいなのか、関数のせいなのかはわかりませんが、
今回は、先頭1000文字(バイト)を判定して判断することにしました。

先頭1000文字が化けてないならあとも大丈夫なはずです。
途中から違う文字コードでDB保存はできないですので。
| マスターメンテナンス | 13:14 | comments(0) | - |
文字コード判定その2
以前、文字コード判定について書きました。
(文字がEUC-JPかを判断する処理)

前はこう書いていました。
$v_encoding = mb_convert_encoding($p_value,'EUC-JP','EUC-JP') ;
return ($v_encoding == $p_value) ;

でもなんか確実さに欠けるような気がしたので別の方法を試しました。

まずは「mb_detect_encoding」関数を改めて、
$encode = mb_detect_encoding( $p_value,'EUC-JP',true ) ;
return ($encode === 'EUC-JP');

できたにはできたのですが、やはり「mb_detect_encoding」関数は
あてにならないということがけっこうネット上に書かれているので不採用。ムニョムニョ

最後は正規表現を使ってみました。

$character_strict = '(?:[¥x00-¥x7F]|' . // EUC-JP文字 3バイト文字を含まない
'¥x8E[¥xA1-¥xDF]|' .
'[¥xA1¥xB0-¥xCE¥xD0-¥xF3][¥xA1-¥xFE]|' .
'¥xA2[¥xA1-¥xAE¥xBA-¥xC1¥xCA-¥xD0¥xDC-¥xEA¥xF2-¥xF9¥xFE]|' .
'¥xA3[¥xB0-¥xB9¥xC1-¥xDA¥xE1-¥xFA]|' .
'¥xA4[¥xA1-¥xF3]|' .
'¥xA5[¥xA1-¥xF6]|' .
'¥xA6[¥xA1-¥xB8¥xC1-¥xD8]|' .
'¥xA7[¥xA1-¥xC1¥xD1-¥xF1]|' .
'¥xA8[¥xA1-¥xC0]|' .
'¥xCF[¥xA1-¥xD3]|' .
'¥xF4[¥xA1-¥xA6])';

 $v_rcd = true;

 if ( $p_value != ""){
  $v_rcd = preg_match("/^$character_strict+$/", $p_value);
 }

 return $v_rcd ;
これはうまくいきました。それに納得のいくコードになりました。ラッキー

VBからプログラムに入った私には、なじみのない正規表現。
使いこなすとすごく便利そう。
| マスターメンテナンス | 11:53 | comments(0) | - |
予防策
うちの家族がインフルエンザになりました。ムニョムニョ
私は予防接種を受けていたので感染しませんでした。
ほんとに受けててよかったなと思いました。パクッ

システム開発の予防策といえば「テスト」です。
納品のときに、予想外のバグがでて、対処できなくならないための予防です。
メンテツールの改修が終了したので、課のメンバーにテストしてもらいました。
開発したシステムは第三者テストを確実に行うようにしています。

自分だけのテストだと、どうしても不安が残るのですが、
他の人にテストしてもらうことバグもみつかりますし、安心感が違います。
明日の納品は問題なく終了するはずです。ニコニコ
(こう言い切れるのも課のメンバーのテストのおかげですが)
| マスターメンテナンス | 18:30 | comments(0) | - |
日付選択
今日は日付を選択するコントロールを作成しました。

年と曜日の指定がないものなのでコンボボックスを並べようかと
思ったのですが、やはり31日まであるとコンボでは使いにくいです。
コンボボックスでの表示はできるだけ10〜20くらいまでにしたいです。
画像

そこで下にあまり行かないようにしてみました。
画像

別に新しくもないですが、とりあえずコンボよりは日にちが選びやすいです。ニコニコ

地味ですけどこういうのを積み重ねてちょっとでも
使いやすくしていきたいです。

ちょっとボタンが矢印なのがわかりづらいですね。
あとで▼にでも変更しておきます。
| マスターメンテナンス | 18:10 | comments(0) | - |
文字コード判定
メンテツールで文字コードが正しいか判断する処理を作成しました。
サーバのPHPでデータを取得するときに判断します。

関数を調べて「mb_detect_encoding」というのを使ってみました。
が、判断されません。どうも今回は使えないようです。ムニョムニョ

2時間くらい考えたあと、やっとうまくいきました。

EUC-JPだったらもう一回「mb_convert_encoding」しても
内容が変わらないのではないかと考えやってみたら
うまく判断されました。

変換した後、元の文字列と内容が違っていたら文字コードが
違うというふうに判断しました。

$str = mb_convert_encoding($str, 'EUC-JP', 'EUC-JP');

なんとなくできたのはいいのですが、裏づけがないと不安です。
ネットで調べてみたら同じような処理で
この方法を使っている例がありました。これで安心して使えます。パクッ


| マスターメンテナンス | 18:24 | comments(0) | - |
起動画面に
起動画面にちょっとしこみました。
以前もいっていたように、日付によって表示するイメージが変わるようにしてみました。NEW!

常に変わるわけではなく12/15〜12/25に
クリスマス風になったりするようにしています雪
(普段は基本の起動画面が表示されます)

特定の日にちょっと違ったイメージが表示されるので
見れる人と見れない人がいるかもしれないですが、
よく使用している人は違うイメージをみる確率が高くなります。

起動時間は縮められないので、別の工夫をしてみました。
違うイメージを見た人の反応がどうかちょっと不安でもあります。パクッ
| マスターメンテナンス | 09:13 | comments(0) | - |
処理の高速化
いまメンテツールの高速化を行っています。
「高速化」というほど速くならないかもしれないですが
少しでも速くなるように調整しています。

処理が遅い部分には必ず原因があります。
それを少しずつ探していきます。

curlだと
let v_start:DateTime = {DateTime}
処理
{output ({DateTime} - v_start) & ":秒かかりました"}
というふうに処理時間を計って原因を特定していきます。時計

原因はわりとすぐ見つかるのですが
見つかった箇所を修正するのはなかなか難しいです。
その部分を作成したときは最善の方法だったはずだからです。

最善といっても納期などの関係もあるので、完璧ではありません。
どこかに改善の余地があります。
考えて試していけば必ず少しは処理時間は縮みます。
(ベストを尽くしていたら縮まないですけど)

ちょっとでも時間を削れるところをみつけて
0.1秒でも縮めばけっこう嬉しいです。
ただ0.1秒とかだと速くなっても使う人にはわかりません。
はっきりと速くなったことがわかるようにしたいと思います。
| マスターメンテナンス | 19:02 | comments(0) | - |
処理速度を上げる
先日マスタメンテツールの納品でした。

その中で処理速度が問題になりました。
たくさんのコントロールを画面に表示するので
どうしても時間がかかってしまうのです。

現在そこを修正中です。
画面ごとの機能を変更していただいて、
処理が遅い画面でRecordGridを使えるようにしました。
やはりTableと比べると表示がかなり速いです。

これで使える速さになったと思います。
| マスターメンテナンス | 20:02 | comments(0) | trackbacks(0) |
テスト中
昨日からメンテツールのテストをしています。

テストすればしただけ修正する部分が出てきます。
現在修正した項目は24個です。
(テストでバグがでるのは良いことです、
納品先でバグがでないようにするのが目的です)
数は多いですが、どれも修正するのはそう難しくありませんでした。パクッ

明日、あさっても引き続いてテストと修正を続けます。
さらに明日は私以外の人にも操作してもらいます。
これで全てのバグをつぶせるはずです。
| マスターメンテナンス | 19:40 | comments(0) | trackbacks(0) |
グループ化
今日でグループ化の部分がだいたいできました。
グループ化はテーブルのカラムを項目ごとにまとめる機能です。
名前と住所を基本情報グループにまとめる。といった感じです。

右のテーブル表示のコンボボックスでグループを選択します。
今回は簡単な操作にするために、左のツリー表示部分で
ドラッグ&ドロップでもグループの設定と並び替えができるようにしました。

画面はこんな感じです。
画像

わかりにくいですけど、ツリー表示の項目をドラッグして移動しています。
画像

ドロップするとグループを移動したり並び替えができます。
この画面ではGroup1からGroup2へ一つ項目を移動しています。
画像
| マスターメンテナンス | 19:15 | comments(0) | trackbacks(0) |
<< | 2/7PAGES | >>