Help me! (助けて!)

2019年2月11日 (月)

gawkの関数:「length」でつまづく!

MS-DOS時代の「jgawk」なら大丈夫なのに、Vectorでダウンロードした「gawk(3.1.5)」でアウト。
「正規表現」 は関係ありません。
おかしな挙動をしたのが「length」。
文字のバイト数を返す関数。
gawkで使うと、おかしなことが起こったんです。
検証のため、こんなテストプログラムを実行。
{
    n = length($0);           # 入力文字列のバイト数
    printf("n:%d\n", n)     # いったん確認
    r1 = "";                    # バッファをクリア
    for(i = 1; i <= n; i++){    # 入力文字数でloop
        c1 = substr($0, i, 1);     # 1文字取り出し
        r1 = r1 c1;                 # バッファに文字として結合
        printf("%s:%d\n",r1,length(r1));   # バッファの文字列とバイト数を表示
    }
}
これがgawkだと、
12345  ←入力文字
n:5    合ってる
1:1    ところが、増えていくはずが・・・
12:1
123:1
1234:1
12345:1   5文字ループしたのに「1」
abcdefg   7文字入力
n:7    合ってる
a:1    ところが・・・
ab:1
abc:1
abcd:1
abcde:1
abcdef:1
abcdefg:1  やはり1のままで違ってる
正しい値は・・・
行末の数字が1234・・・と+1ずつ増加しなくちゃなりません。


で、正しい答えを出す方法。
gawkのままで
 1:     r1 = r1 c1 "";           # 空文字を結合
 2:     printf("%s:%d\n",r1,length(r1 ""));   同じく
 3:     起動オプションに -W ctype=ASCIIを加える
             ctype=SJISだとダメ。
jgawkだとそのままでok
むちゃ悩んだぞ~~~っと。
どうしたものか。
※結果・・・
gawkのバージョンを上げるということで対応。(4.1.4に)
ここからダウンロード。
 
Free download of the version 4.1.4 (Aug 2016)
(Version 4.1.4)

Win32 executable

Version in English Version in English



※ところが・・・
4.1.4では日本語がアウト。
起動オプションも見当たらず。

| | コメント (4) | トラックバック (0)

2019年2月10日 (日)

「gawk」の正規表現・・・続き

の続きで、gawkの正規表現で悩んでいます。
・やりたいこと
OrCADの部品ライブライーソースファイルの中に出てくる
こんな文字列(「'xxxx'」というふうに「'」で区切られている)内の
「スペース」を「_」(下線記号)に変えたい。
・例 文字列
  'VOLTAGE REGULATOR'
  L1  3  SHORT   IN  'PLUS INPUT'
    R1  'C2' CLK  OUT 'CLK OUT'
・なぜか
gawkの「スペースで文字列を文字単位に」分割するという
機能、「'」で区切られた文字列内にスペースがあると、
そこで切られてしまいす。
「'  '」内のスペース、これを「_」(下線記号)に変えて、
分割されないようにしたいわけで。
・条件
1行に複数個の「'  '」が出現することもある。
・試したのはこんな処理
    while(1){                                 # 「'  '」がいくつもあるかもしれないので
        match($0, /'[^']*'/);
        if(RSTART == 0)     break;     # 「'  '」がなければおわり
        s1 = substr($0, 1, RSTART-1);             # 「'  '」の左側
        s2 = substr($0, RSTART, RLENGTH);   # 「'  '」の部分
        s3 = substr($0, RSTART+RLENGTH);   # 「'  '」の右側
        gsub("'", "@", s2)      # 「'  '」部分の「']をいったん@に
        gsub(" ", "_", s2)       # 「'  '」部分スペースを「_」に
        $0 = s1 s2 s3            # あらたな$0
    }   
    gsub("@", "'", $0)         # @を「'」に変えて元に戻す
「'  '」が複数個出るかもということで、「']をいったん@に変えて、
1行の先頭から処理するようにしました。
gawkらしく、もっとスマートな方法は?
   ※Cだとチカラ技で処理を進めるですが、gawkの書式はパズルです。
     1文字ずつ読み出して「'」が来たらスペースを「_」にというほうが
     良いかな。
そういや、こういった記述にも対応しないと。
R1    24   OUT 'QA''' ← QA'が信号名で 二つの「''」で
文字としての「'」を示すわけでして・・・。

| | コメント (3) | トラックバック (0)

2019年2月 9日 (土)

「gawk」の正規表現で

の記事に対するCPU.BACHさんのコメントに関して・・・

「LIBSX」という「OrCAD」の部品ライブラリソースファイルを、
水魚堂さんの回路図エディタ「CE」の部品ライブラリに変換
するツールがあります。
これ、MS-DOS時代のツールでして「MS-C」で作ったんです
が、これを手直しして「BSch3V」用の部品ライブラリ「LB3」
変換ツールに出来ないものかと、ちょいと試行錯誤してみ
ました。
で、ツールですがCでコンパイルするんじゃなく、「gawk」を
使ってみました。

  ※MS-DOS時代からjgawkはあれこれと使っています。

そこで、OrCAD部品ソースに出てくる文字列処理での
「正規表現」につまずいちゃいました。

部品ソース内にこんな行が出てきます。

'7400'  ←部品名
{X Size =}  4 {Y Size =} 4 {Parts per Package =}  4 ★
L1      1   4   9  12         IN  'I0'  ←ピン指定
L3      2   5  10  13         IN  'I1'
R2      3   6   8  11 DOT     OUT 'O'
T0     14  14  14  14         PWR 'VCC'
B0      7   7   7   7         PWR 'GND'

★部分で部品の大きさとパッケージ内の個数を
示しています。
前処理としてコメント文字列である「 {xxx} 」を消して、
数字「4 4 4」だけを残したいのですが、この↓正規表現
ではうまくいきません。

   gsub(/{.*}/, "", $0)

{ }に囲まれた文字列という正規表現なのですが、
   {xxx} yyy {xxx} zz が
   1   2      3    4

残したいyyyまで消えて、最後尾のzzしか残らない
のです。
「/{.*}/」だと、{ }のくくりを、2と3を飛ばして「1~4」にし
ちゃっています。
ほんとは、1~2で処理。続いて3~4で処理と{ }を含
めて{ }内の文字列を消して欲しいのです。

しかたなく、↓のようなスクリプトでもって{ }を消して
います。
1文字ごと読み出して { 出現でコピーをオフ、} 検出以降
にコピー再開。

  ※こりゃawkのスクリプトじゃないぞ(笑)

#####   コメントを取り除く      #####
#   読み出したデータの中から「コメントフィールド」を取り除く
#   OrCADのライブラリソースのコメントは「{...}」となっている
#   直接バッファを操作して「{}」とコメントを取ってしまう
#   gsub(/{.*}/, "", $0)だと
#   「{xxx} yyy {xxx} zz」が yyyまで消えてzzしか残らない
function rmvcmnt(s,  c,f)
{
    r_bff = "";
    f = 0;              # 1で文字コピー禁止
    for(i = 1; i <= length(s); i++){
        c = substr(s, i, 1);                # 1文字取り出し
        if(c == "{")        f = 1;          # 「{」以降はコピーしない
        else if(c == "}")   f = 0;          # コピー再開
        else if(f == 0){                    # 文字連結
            r_bff = r_bff c;                # {xxx}以外の文字はコピー
        }
    }
    return r_bff;       # コメント削除した1行
}

正規表現を使っての何か良い手順はありませんかね?

※参考
ファイルから読み出した1行は「$0」に入る。
function rmvcmnt(s,  c,f)の s は関数への引数。
その次にスペースをあけてのc,fは関数内部だけの局所変数。

ほかにも、「 { } 」で囲まれたこんなコメントがあります。

      {000000000011111111112}
      {.....................}
      {012345678901234567890}
{  0.0}##...................
{  0.1}#.##.................
{  0.2}#...##...............
{  0.3}#.....##.............
{  0.4}#.......##...........
{  0.5}#.........##.........
{  0.6}#...........##.......
{  0.7}#.............##.....
{  0.8}#...............##...
{  0.9}#.................##.
{  1.0}#...................#
{  1.1}#.................##.
{  1.2}#...............##...
{  1.3}#.............##.....
{  1.4}#...........##.......
{  1.5}#.........##.........
{  1.6}#.......##...........
{  1.7}#.....##.............
{  1.8}#...##...............
{  1.9}#.##.................
{  2.0}##...................

これも行の中から消してしまいたいわけでして。

{X Size =}  、 {Y Size =}、{Parts per Package =}は
固定文字列なんで3つを個別にgsubで先に処理。
その後、「{  2.0}」などを正規表現で削除かな。

こんな具合に。

#    コメント文 {xxx} を消す
   gsub("{X Size =}", "", $0);                # コメント削除               
    gsub("{Y Size =}", "", $0);
    gsub("{Parts per Package =}", "", $0);
    gsub(/{.*}/, "", $0);                    # 残りの{...}を全部
   :

| | コメント (3) | トラックバック (0)

2018年12月 4日 (火)

「14780」って?

とある赤外線リモコンの修理依頼。
正体不明なTO-220の石が・・・

12_2

電源ライン(単4電池4本)から、ダイオードを通ってこのICに入ってます。
「M」のマーク、モトローラそれともミツミ電機?
  1pin:GND  2pin:入力  3pin:出力
なんですが、電池のラインに入ってるんでむちゃローパワーなはず。
おそらくレギュレータに間違いないかと思うんですが。。。。
それともう一つデータが出てこない石が載ってます。
沖の「MSM5564」。
タイマーICっぽい感じ。

| | コメント (5) | トラックバック (0)

ボリューム軸いじり防止金具

ボリューム軸を回されないために・・・保護金具 の現物がやってきました。

こんなのでした。 9mmで0.75mmピッチ

11

12

13

近所の鉄工所↓
   佐藤テック君とことは違います。
   中川連合の町会長仲間でNC機を扱っている
に見積依頼・・・最低個数とその価格
しました。
最初からローレット加工された棒材があるとのこと。

| | コメント (0) | トラックバック (0)

2018年11月22日 (木)

ボリューム軸を回されないために・・・保護金具

客先からのhelp。
『下間さん、こんな部品、知らんかな?』っと。
現物として有るそうなんですが、メーカーや型番が不明という状況。
   ※写真をまだもらってないので、想像で。
こんなものらしいです。
ツマミが付かない可変抵抗
・パネルに取り付けてあって、マイナスドライバーで
 調整できるようになっている。
・調整完了後、簡単にさわれないようにしたい。
・パネルに見えているボリューム軸のネジ溝に回し込んで
 回転軸を隠してしまう部品、これが欲しい。
こんなモノだそうです。
※想像で再現↓ (笑)
11
マイナスドライバーを使って軸を回すタイプの可変抵抗。
パネルに止めねじが見えている。
そこに、保護金具を回し込めば、軸は簡単に回せなくなる。
12

おそらくこんなものかと。
金属製らしいですが、樹脂でもOK。
ネットで調べようにも、部品の一般名称が不明でして、
画像検索してもそれらしきものが出てきません。

お知恵をお貸しください。

| | コメント (16) | トラックバック (0)

2018年10月29日 (月)

トラ技Jr.での工場めぐり

先週金曜日、トラ技編集部の方が来社。
  ※残念なことにスケジュールの都合で
   ガレージには来られずで。
あれこれお話の中で、こんな依頼が。

・トラ技の別冊、トラ技Jr. (トラギ・ジュニア)
 の記事に関して。

B12

 ※解説:「トラ技Jr.」は季刊の小冊子。
    毎春号は本誌の付録になりますが、他の号は
   「頼まないと」手に入りません。
   しかし、学生さんと25歳以下の新人エンジニア
   さんには無料で送ってくれます。

B11

・トラ技Jr.の記事で、今号(2018年秋)が第1回目の
 連載が「オームぼうやの工場めぐり」。
 工場の見学記をイラストで紹介という企画です。
   ※絵になっちゃうんで製品や装置、工程の秘密は
    守られます。
 今回の記事は「プリント基板の製造工場」。
  素材が、いろんな工程を経てプリント基板ができ
  あがってくる様子がイラストで紹介されています。

A14

・「見学して記事にできる工場、下間さん知りませんか?」っ
 という相談です。

・電気、電子関連じゃなくてもOK。
 機械屋さんでも可。
 面白いものを作っているところを見学したいっと。

どなたか、お知恵を。

| | コメント (0) | トラックバック (0)

1970年代の三枚おろししていない「トラ技」

手元に残っていた1970年代のトラ技、いよいよ編集部に
行くことになりました。
条件が
  ・広告が残っているもの
つまり、三枚おろししていないもの。
      ↓
真ん中の記事だけを残して、前後の広告を
外してスリム化する作業。
こちらで該当するものはこれだけ。
10
左端の5冊が仕事場に置いてあったもの。
右のがガレージの段ボールで保管していたもの。
これ以降のトラ技、みんな三枚おろしにしてました。

1960年代のは1冊だけ。  (高校の先輩の本)
もし、1960年代、1970年代のトラ技をお持ちなら、
トラ技編集部までご連絡を。


※関連
以下の14冊がトラ技編集部に行くことになりました。
  1968年 11月号
  1971年 4月号
  1972年 8,9月号
  1973年 3,4月号
  1974年 3,11月号
  1975年 5,12月号
  1976年 5,9月号
  1977年 2,3月号

※検索
 
 

| | コメント (1) | トラックバック (0)

2018年10月15日 (月)

ベータのビデオテープを再生したい

地車(だんじり)メンバーからのHelp!
『大昔に撮った地車のビデオ、ベータのテープに
 入ってるんだが、デッキが壊れてて再生できない。
 動くベータのビデオデッキ、どこかにないだろか?』
ということなんですが・・・

| | コメント (2) | トラックバック (0)

2018年10月11日 (木)

パナソニック「HCリレー」廃番に!

とあるパワー回路の修理で使っているパナソニックのHCリレー
2018年9月末で全品種廃番
です。

Cap001

代替品無し!
修理に必要なリレー、端子幅「0.9mm」というものを使っていて、
もともとこれは標準品じゃありません。
   ※わたしとこの設計じゃないんで
これまでも、納期が1~2ヶ月必要でした。

この端子幅が特殊じゃなかったらオムロンのMYリレーでもokなんですが、
基板の穴寸法が0.9mmに合わせて作ってあって、どうにもこうにも・・・・
修理用の在庫、10個ほど。
   ※9月25日に20個注文したんだけど、これは入ってくるのかな?
※関連
パナソニック・HCリレー、通常のハンダ付け端子品(右側)と
幅狭端子品の違い。  (なんでこれを選んだんだ!っと)
11

拡大↓
12

修理する基板のスルーホール(両面基板)、左側の
端子しか入らないんです。
入荷の具合で通常品の端子品しか無い時は、1.5mmの
端子を細く削って対応したこともありました。

で、その後。  代品をあれこれ調べてましたら
オムロンの共用ソケットで細い足のを発見。
「PY08-02」で、端子の幅が1.0mm
P1
P2
修理する基板、不良リレーを抜いた後にこのソケットを入れ、
オムロン「MY-2」リレーを挿入すれば解決できるかも。
次回、修理依頼があった時に試してみます。


| | コメント (2) | トラックバック (0)