WordPressチラシの裏 | IT系に係る基礎的な情報と便利な使い方を更新します。 https://wpchiraura.xyz IT系に係る基礎的な情報と便利な使い方を更新します。 Thu, 14 Sep 2023 12:13:49 +0000 ja hourly 1 https://wordpress.org/?v=6.0.7 https://wpchiraura.xyz/wp-content/uploads/2018/06/cropped-logo-32x32.png WordPressチラシの裏 | IT系に係る基礎的な情報と便利な使い方を更新します。 https://wpchiraura.xyz 32 32 WSL2+Docker+VsCodeでWinows10にGnuCobol(Opencobol)のデバッグ環境を作ってみる!Vol.3 https://wpchiraura.xyz/gnucobol_install_vol3/ https://wpchiraura.xyz/gnucobol_install_vol3/#respond Mon, 04 Sep 2023 13:15:47 +0000 https://wpchiraura.xyz/?p=3363 前回に引き続き今回はVisual Studio Codeの拡張機能を使って必要な拡張機能をインストールしていきます。

前回までの内容は以下のリンクから参照してください。

wsl2とubuntuのインストール
UbuntuにGnuCobolとGnuDebuggerのインストール

VisualStudioCodeのダウンロード&インストール

まず、Visual Studio Codeをダウンロードします。
1.以下のブラウザへ行ってWindowsをクリックするとインストーラがダウンロードされます。
https://code.visualstudio.com/download

2.ダウロードされたインストーラーをダブルクリックするとインストールされますのでデフォルトのまま画面にそってインストールしてください。
※2023/09/02時点では「VSCodeUserSetup-x64-1.81.1.exe」

3.vscodeのパスを有効にするためOSの再起動をします。

VScodeで拡張機能のインストール

補足:拡張機能の検索策窓を表示するショートカットキー

Ctrl + Shift + X を同時押しすると「Extensions」の検索窓が左上に表示されますので、必要な拡張機能入力してをインストールします。

Japanese Language Pack for Visual Studio Codeのインストール

Visual Studio Codeのメニューを日本語表示します。(必要であれば)

・「Extensions」アイコンをクリック→検索窓に「Japanese Language Pack」と入力→「install」をクリック→「Change Language and Restart」をクリック

Visual Studio Codeが再起動されると有効化され日本語表示に変わります。

wslの拡張機能のインストールとVscodeの連携

この拡張機能をインストールすると、VSCodeとUbuntuを連携しWindows から VS Code のターミナルを使用して、Subsystem(WSL) 上で実行される Linux(Ubuntu) を直接操作可能になります。

1.「Extensions」アイコンをクリック→検索窓に「wsl」と入力→「install」をクリックします。


2.ubuntuのターミナルからお好みのホルダを作成します。
私は、以下のように「test
」ホルダを作成しました。

mkdir test        #フォルダ作成

3.Vscodeのターミナル「wsl_ubuntu」もしくは「Bach」から以下のコマンドを使ってお好みのディレクトリへ移動
※vscodeにターミナルが表示されていない方はvscodeの「メニュー」→「新しいターミナル」をクリックすると下にターミナルが表示されますので、「ⅴ」をクリックして利用するターミナルを選択してください。

4.「code .」と入力後エンターキーを押します。

cd /home/ユーザー名           #ディレクトリ移動
code .                 #vscode-serverのインストール

するとLinux側に「VSCode Server」が自動的にインストールされ、Windows側のVSCodeがUbuntuと連携され新しいVscodeが表示されます。
・「親フォルダー’home’内のすべてのファイルの作成を者を信頼します」に「✔
・「はい、作成者を信頼します」をクリックします。

GnuCOBOLの拡張機能をインストール

この機能をインストールするとGnuCobol(旧:opencobol)の言語をサポートします。

GnuCobolの予約語は公式のページで確認してください。
まずは、以下の手順で拡張機能をインストールします。

1.「Extensions」アイコンをクリック→検索窓に「GNUCOBOL」と入力→「install」をクリックします。

2.先程作成した「test」ホルダへ移動して、以下のコマンドを使ってファイルを作成します。

cd /home/ユーザー名/test               #ディレクトリ移動
touch hello.cob             #ファイルの作成

3.作成した空のファイル(heloo.cob)にお馴染みの「”Hello, World!”」を表示するプログラムを記載します。

000000 IDENTIFICATION DIVISION.
000010 PROGRAM-ID. HELLO.
000020 PROCEDURE DIVISION.
000030 DISPLAY "Hello, World!"
000040 STOP RUN.

最終行は必ず改行しててください。
以下のコマンドでコンパイルします。

cobc -x --free hello.cob

上記コマンドで、コンパイルができましたら以下のように入力して実行します。

./hello

以下のようにターミナルに出力されていればOKです。

user@DESKTOP-SQ1FG7D:~/test$ ./hello
Hello, World!
user@DESKTOP-SQ1FG7D:~/test$

補足
1.cobc はコンパイラ
2.-x オプションは実行ファイルを作成します
3.–free は自由書式で作成する際使用します

それでは、次回はいよいよデバックをしていきたいと思います。

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/gnucobol_install_vol3/feed/ 0
WSL2+Docker+VsCodeでWinows10にGnuCobol(Opencobol)のデバッグ環境を作ってみる!Vol.2 https://wpchiraura.xyz/gnucobol_install_vol2/ https://wpchiraura.xyz/gnucobol_install_vol2/#respond Thu, 31 Aug 2023 14:09:43 +0000 https://wpchiraura.xyz/?p=3403 WindowsでGNUCobolのデバックを使うにはイントールできるソフトウェアが削除されていることもあり、無理でしたのでUbuntuでインストールしていきます。

今回は、WSLではsystemdがPID1で動いていないためこれらを先に処理していきます。

WSL関連の処理

依存パッケージのインストール

Ubuntuを開き事前に以下のコマンドを入力しインストールします。

sudo apt install -y daemonize dbus gawk libc6 policykit-1 python3 python3-pip python3-psutil systemd systemd-container
sudo apt update
sudo apt dist-upgrade

使用するテキストエディタをVimに変更

以下のコマンドでVimをインストールします。

sudo apt install -y vim

Vimをデフォルトエディタにする

sudo update-alternatives --config editor

以下のように番号を選択する画面が出力されますので3と入力してエンターを押します。

user@DESKTOP-SQ1FG7D:~$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    15        manual mode

Press  to keep the current choice[*], or type selection number:3

確認のため 現在のデフォルトであるテキストエディタを表示します。

ls -lRa /etc/alternatives/editor

以下のように「/usr/bin/vim.basic」と出力されていればOKです。

user@DESKTOP-SQ1FG7D:~$ ls -lRa /etc/alternatives/editor
lrwxrwxrwx 1 root root 18 Aug 27 11:20 /etc/alternatives/editor -> /usr/bin/vim.basic

wsl-トランスデビアンの事前確認

以下コマンドで対応の「lsb_release」 がインストールされていることをこちらのサイトで事前に確認してくたざさい。

rootユーザー sudo su として、以下のコマンドを入力します

apt install lsb-release

wsl-transdebian リポジトリの構成

rootユーザーsudo suとして、以下のコマンドを入力します。

wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg

chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg

cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
EOF

続いて、リポジトリの更新後 rootユーザー から通常のユーザーにします。

apt update
exit

system-genie のインストール

参考サイト:https://zenn.dev/fehde/articles/103560f2a7065f

sudo apt install -y systemd-genie

Genieの設定

sudo cp /etc/genie.ini /etc/genie.ini.bak
sudo sed -i 's/systemd-timeout=240/systemd-timeout=30/g' /etc/genie.ini
sudo sed -i 's/update-hostname=true/update-hostname=false/g' /etc/genie.ini
sudo ssh-keygen -A

Genieの起動

genie -s

以下のように出力されていればOKです。

user@DESKTOP-SQ1FG7D:~$ genie -s
genie: WARNING: systemd default target is default.target; targets other than multi-user.target may not work
genie: WARNING: if you wish to use a different target, this warning can be disabled in the config file
genie: WARNING: if you experience problems, please change the target to multi-user.target
Waiting for systemd....!!!!!!!!
user@DESKTOP-SQ1FG7D:~$

PID 1 の確認

PID 1 が systemd になっているか以下のコマンドを使って確認します。

ps -aux | head -n 2

出力画面を見るとPIDが「systemd」になっていることが確認できましたね。

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.3  0.0 167456 12528 ?        Ss   07:29   0:00 systemd
user@DESKTOP-SQ1FG7D:~$

sytemd のデフォルトターゲットを変更

systemctl get-default
sudo systemctl set-default multi-user.target
sudo systemctl list-dependencies


Vimエデッタを使用されている方は
ESC :q  エンターで通常のコマンドラインに移ります。
※一番下まで確認したい場合は下「↓」キーで移動できます。

sshのインストール

Ubuntu のデスクトップ版をインストールしたときにこのプログラムは含まれてないらしいのでインストールします。

sudo apt install openssh-server

以下のコマンドで自動起動と起動処理をします。

sudo systemctl enable ssh
sudo systemctl start ssh

サービス動作状況確認を以下のコマンドでします。

sudo systemctl status ssh

動作確認がとれましたね

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-08-27 10:02:21 JST; 7min ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 1076 (sshd)
      Tasks: 1 (limit: 30169)
     Memory: 1.7M
     CGroup: /system.slice/ssh.service
             └─1076 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

補足となりますがアドレスを表示するは以下のコマンドを使います。

scurl ifconfig.me  #サーバと通信する時に使われるパブリックIPアドレスを表示
ip a          #IPv4とIPv6アドレスを表示
hostname -I      #IPv4アドレスを表示

対応していないサービスの無効化

sudo systemctl disable getty@tty1

WSL 起動時に Genieを実行できる?

Microsoft公式ドキュメントにあるように、/etc/wsl.conf には以下が追加されていましたね

s[boot]
systemd=true

しかし、自動起動はやはり難しいようです。

.bashrcvim ~/.bashrc コマンドで編集したりもしてみたのですが、システムを再起動すると、私の環境ではPID 1systemd でなくinitになっていたので、システムを起動する際、Genieをgenie -s コマンドを使って起動するしか今のところは解決策は見当たりまんでしたので、現在は以下のようにコメントアウトしています。
※環境によっては、有効な場合もあるかもしれませんので一応記載しておきます。

## Are we in the bottle?
#if [[ ! -v INSIDE_GENIE ]]; then
#  read -t 3 -p "yn? * Preparing to enter genie bottle (in 3s); abort? " yn
#  echo

#  if [[ \$yn != "y" ]]; then
#    echo "Starting genie:"
#    exec /usr/bin/genie -s
#  fi
#fi

GNUCobolのインストール

さて、いよいよGnucobolのインストールを以下のコマンドを使ってインストールしていきます。

sudo apt-get install gnucobol

途中、Do you want to continue? [Y/n]と表示されたらyエンター

インストールが終わったら以下のコマンドで確認します。

cobc --version

出力された画面からGnucobol3.1.2.0がインストールされていることが確認できました。

user@DESKTOP-SQ1FG7D:~$ cobc --version
cobc (GnuCOBOL) 3.1.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Built     Sep 14 2021 19:23:38
Packaged  Dec 23 2020 12:04:58 UTC
C version "11.2.0"
user@DESKTOP-SQ1FG7D:~$

GNU Debuggerのインストール

以下のコマンドでgdbのインストールをします。

sudo apt-get install gdb

途中、Do you want to continue? [Y/n]と表示されたらyエンター
インストールが終わったら以下のコマンドで確認します。

 gdb --version

バージョン12.1がインストールされているのが確認できました。

GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
user@DESKTOP-SQ1FG7D:~$

今回はここまで・・

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/gnucobol_install_vol2/feed/ 0
WSL2+Docker+VsCodeでWinows10にGnuCobol(Opencobol)のデバッグ環境を作ってみる!Vol.1 https://wpchiraura.xyz/gnucobol_install_vol1/ https://wpchiraura.xyz/gnucobol_install_vol1/#respond Thu, 17 Aug 2023 14:00:26 +0000 https://wpchiraura.xyz/?p=3318 Cobolの仕事をするようになったけど、COBOLにはIDE(統合開発環境)がなく自宅で練習もできないので、困ってしまって模索の結果やっとたどり着けそうなので備忘録です!

システム要件

Winwos10で、GNUCOBLのデバッグ機能を使うには以下のシステム要件が必要です。

WSL2の前提条件を確認する

1.x64 システムの場合: バージョン 1903 以降 (ビルド 18362.1049 以降)。
2.ARM64 システムの場合: バージョン 2004 以降 (ビルド 19041 以降)。

参考サイト
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual

Dockerの前提条件を確認する

・Windows 10 Pro/Enterprise 上の Docker Desktop 2.0 以降。
・Windows 10 Home (2004 以降) は、Docker Desktop 2.2 以降と WSL2 バックエンドが必要です。

参考サイト
Windows Home に Docker Desktop をインストール

Linuxインストール前の準備

WSL2の機能を使って、Windows上でLinuxをの実行環境を作ります。

・Windowsの「スタートボタン」→「Windows システム ツール」→「コントロールパネル」→「プログラム」→「Windowsの機能の有効化または無効化」と進み以下のように仮想マシンの機能を有効にした後画面の指示に従って再起動します。

WSL2用Linuxカーネルのインストール

1.ブラウザで「https://aka.ms/wsl2kernel」にアクセスして「x64マシン用WSL2 Linuxカーネル更新プログラムパッケージ」をクリックしてダウンロードします。

2.ダウンロードした更新プログラム「 wsl_update_x64.msi」をダブルクリックするとインストラーが起動するので「Next」→「Finish」と進むとインストールは終わります。

WSL 2 を既定のバージョンとして設定する

PowerShellから以下のコマンドを実行します。

wsl --set-default-version 2

Linux ディストリビューションをインストールする

1.Windowsの「スタートボタン」→「Microsoft Store」と進みMicrosoft Storeを表示します。

2.「Microsoft Store」の検索窓に「ubuntu」と入力し「インストール」をクリックするとブラウザ上でインストールが開始されます。
3.インストールが終わりましたら「開く」をクリックするとubuntuの画面が表示されます。
4.ubuntuにユーザー情報の登録をします。
・「Enter new UNIX username」→ 新しく設定するユーザー名を入力します
・「New password」      → パスワードを入力します
・「Retype new password」     → 同じパスワードをもう一度入力します

※入力したpasswordは画面に表示されませんので入力したら「エンター」キーを押します。

以下のように表示されていればOKなので「exit」と入力しエンターを押すとubuntuの画面は閉じます。

・passwd: password updated successfully
・Installation successful!
・Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64)


これで、wsl2が使用できるようになりました。
さて、ここからが本題です!!


GNUCOBOLの設定とインストール準備

 

インストールされる方は「chocoコマンドでGnuCobolをインストール」から参考にしてください!

2023/8/20追記します。
次回の記事から参考にしてください。

GnuCobolのダウンロード

ブラウザでGnuCbolにアクセスして「Windows」をクリックします。

「gnucobol-3.2_win.7z」がダウンロードされますので、お好みの場所に解凍します。
私は、Cドライブ直下に「GnuCobol」というフォルダほ作り解凍。

※このパッケージにインストラーはありませんので、手動でインストールする必要があります。

configureの設定

ダウンロードしたファイルを参考に以下のように設定とインストールをします。

1.「configure」ファイル内
–exec-prefix=EPREFIXの[PREFIX]に絶対パスを指定する。
私はCドライブ直下の「GnuCobol」の中に解凍したので [PREFIX]に
C:\GnuCobol を指定し上書き保存

2.「./configure && make && make install」でインストール

参考サイト

configureオプションが知りたい〜バイナリのインストール先を知る〜

make installをwindosで実行

make installをwindowsに実行するにあたり以下のサイトを参考にさせていただきました。
ありがとうございました。

参考サイト

Windows10環境でmakeコマンドを使用する方法【ハマリ回避】

上記サイトを参考にするので、詳細な説明は割愛します。
1.Make for Windowsをダウンロード
ダウンロードされたファイル名→「make-3.81.exe」
2.インストール先をCドライブ直下に変更してインストール
3.make コマンドを実行できるように「パス」を通す
4.vacodeでMekefile Tools の拡張

GNUCOBOLのインストール

コマンドプロンプトとPowerShellからではコマンドが認識されないので「Git Bash」で実行

1.Git BashからGnuCobolのフォルダに移動

cd C:\GnuCobol

2.以下のコマンドでインストール

 ./configure && make && make install

以下のように「checking for gcc… no」とエラー表示されているので、Cのコンパイラを入れてみる

gccのインストール

1.以下のサイトから「x86_64-13.1.0-release-win32-seh-ucrt-rt_v11-rev1.7z」をダウンロードする
https://github.com/niXman/mingw-builds-binaries/releases

2.Cドライブ直下に「MinGW-w64」フォルダを作成し展開する

3.環境変数の設定「C:\MinGW-w64」にbinフォルダを配置したので「C:\MinGW-w64\bin」と設定

4.コマンドプロンプトを開き「gcc -v」と入力以下のように「bcc version13.1.0」と表示されているのでOKのはず・・

5.再度「./configure && make && make install」をしてみましたが・・
結果は変わらずで、Cのコンパイラが認識されていないようです。

GUNCOBOLは、C言語のソースへ変換して、C言語のソースをGCC(GnuのCコンパイラ)でコンパイルし実行可能プログラムを生成していますので、必要だったのですが・・

再度別のキーワードで調べてみるとどうやら、Windowsもインストールコマンドがあることを知りました。
Linux(ubuntu)では「sudo apt-get install gnucobol」でインストールできたので、Windowsでもあるのでは?と探してみましたが当初は見つけることができませんでしたが、探すキーワードが変わったことでやっと見つけることができました!
長~い道のりでした!

参考サイト
https://stackoverflow.com/questions/45281932/installing-gnucobol-on-windows10

 

chocoコマンドでGnuCobolをインストール

PowerShellに管理者権限で入って以下のコマンドでインストールします。

choco install gnucobol

途中 Do you want to run the script?([Y]es/[A]ll – yes to all/[N]o/[P]rint): と表示されるので  y エンター

 ShimGen has successfully created a shim for cobcrun.exe と表示されているのでインストール完了です。

なんと・・アッ!という間に終わってしまいましたね!

これまでのまとめ

今回の記事の前に試したみたことを下表に残します。

1.結論からいうとVMwre(仮想環境内)にubuntuをインストールして更にDockerのインストールはやはり無理?
正確にはVMwer社もまだお試し段階のようでしたので、今回は諦めました。

VMware WSL2
ubuntu
Docker 〇のはず

2023/8/20追記します。
2.Windows環境でコンパイルする場合、makeファイルの変換エラーがでてデバックできなかったので、回避策を思案中!

3.wslを利用してubuntuのインストールは可能でしたが、WSLではsystemdがPID1で動いていないためこれらをカバーする回避策も必要。

次回はVScodeで拡張機能をインストールし設定もしていきます。

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/gnucobol_install_vol1/feed/ 0
COBOL 予約語 https://wpchiraura.xyz/cobol_-reserved-word/ https://wpchiraura.xyz/cobol_-reserved-word/#respond Sun, 13 Aug 2023 03:00:04 +0000 https://wpchiraura.xyz/?p=3304 第3次規格の予約語一覧
A
ACCEPT ACCESS ADD
ADVANCING AFTER ALL
ALPHABET ALPHABETIC ALPHABETIC-LOWER
ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED
ALSO ALTER ALTERNATE
AND ANY ARE
AREA AREAS ASCENDING
ASSIGN AT AUTHOR
B
BEFORE BINARY BLANK
BLOCK BOTTOM BY
C
CALL CANCEL CD
CF CH CHARACTER
CHARACTERS CLASS CLOCK-UNITS
CLOSE COBOL CODE
CODE-SET COLLATING COLUMN
COMMA COMMON COMMUNICATION
COMP COMPUTATIONAL COMPUTE
CONFIGURATION CONTAINS CONTENT
CONTINUE CONTROL CONTROLS
CONVERTING COPY CORR
CORRESPONDING COUNT CURRENCY
D
DATA DATE DATE-COMPILED
DATE-WRITTEN DAY DAY-OF-WEEK
DE DEBUG-CONTENTS DEBUG-ITEM
DEBUG-LINE DEBUG-NAME DEBUG-SUB-1
DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING
DECIMAL-POINT DECLARATIVES DELETE
DELIMITED DELIMITER DEPENDING
DESCENDING DESTINATION DETAIL
DISABLE DISPLAY DIVIDE
DIVISION DOWN DUPLICATES
DYNAMIC
E
EGI ELSE EMI
ENABLE END END-ADD
END-CALL END-COMPUTE END-DELETE
END-DIVIDE END-EVALUATE END-IF
END-MULTIPLY END-OF-PAGE END-PERFORM
END-READ END-RECEIVE END-RETURN
END-REWRITE END-SEARCH END-START
END-STRING END-SUBTRACT END-UNSTRING
END-WRITE ENTER ENVIRONMENT
EOP EQUAL ERROR
ESI EVALUATE EVERY
EXCEPTION EXIT EXTEND
EXTERNAL
F
FALSE FD FILE
FILE-CONTROL FILLER FINAL
FIRST FOOTING FOR
FROM FUNCTION
G
GENERATE GIVING GLOBAL
GO GREATER GROUP
H
HEADING HIGH-VALUE HIGH-VALUES
I
I-O I-O-CONTROL IDENTIFICATION
IF IN INDEX
INDEXED INDICATE INITIAL
INITIALIZEINTO INITIATE INPUT
INPUT-OUTPUT INSPECT INSTALLATION
IS
J
JUST JUSTIFIED
K
KEY
L
LABEL LAST LEADING
LEFT LENGTH LESS
LIMIT LIMITS LINAGE
LINAGE-COUNTER LINE LINE-COUNTER
LINES LINKAGE LOCK
LOW-VALUE LOW-VALUES
M
MEMORY MERGE MESSAGE
MODE MODULES MOVE
MULTIPLE MULTIPLY
N
NATIVE NEGATIVE NEXT
NO NOT NUMBER
NUMERIC NUMERIC-EDITED
O
OBJECT-COMPUTER OCCURS OF
OFF OMITTED ON
OPEN OPTIONAL OR
ORDER ORGANIZATION OTHER
OUTPUT OVERFLOW
P
PADDING PAGE PAGE-COUNTER
PERFORM PF PH
PIC PICTURE PLUS
POINTER POSITION POSITIVE
PRINTING PROCEDURE PROCEDURES
PROCEED PROGRAM PROGRAM-ID
PURGE
Q
QUEUE QUOTE QUOTES
R
RANDOM READ RECEIVE
RECORD RECORDS REDEFINES
REEL REFERENCE REFERENCES
RELATIVE RELEASE REMAINDER
REMOVAL RENAMES REPLACE
REPLACING REPORT REPORTING
REPORTS RERUN RESERVE
RESET RETURN REVERSED
REWIND REWRITE RF
RH RIGHT ROUNDED
RUN
S
SAME SD SEARCH
SECTION SECURITY SEGMENT
SEGMENT-LIMIT SELECT SEND
SENTENCE SEPARATE SEQUENCE
SEQUENTIAL SET SIGN
SIZE SORT SORT-MERGE
SOURCE SOURCE-COMPUTER SPACE
SPACES SPECIAL-NAMES STANDARD
STANDARD-1 STANDARD-2 START
STATUS STOP STRING
SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3
SUBTRACT SUM SUPPRESS
SYMBOLIC SYNC SYNCHRONIZED
T
TABLE TALLYING TAPE
TERMINAL TERMINATE TEST
TEXT THAN THEN
THROUGH THRU TIME
TIMES TO TOP
TRAILING TRUE TYPE
U
UNIT UNSTRING UNTIL
UP UPON USAGE
USE USING
V
VALUE VALUES VARYING
W
WHEN WITH WORKING-STORAGE
WRITE
Z
ZERO ZEROES ZEROS

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/cobol_-reserved-word/feed/ 0
【Java】開始処理位置を切り替える条件分岐switch文 https://wpchiraura.xyz/java_switch/ https://wpchiraura.xyz/java_switch/#respond Sat, 05 Aug 2023 11:48:22 +0000 https://wpchiraura.xyz/?p=3234 switch文は処理を切り替えることができます。
ifとの違いは条件によって分岐されるではなく条件式が値に一致するかどうかという単純なもの。

switch文の構文

switch(式){
case 値1:
    処理1;
    break;
case 値2:
    処理2;
    break;
case 値3:
    処理3;
    break;
default:
    その他の処理; }

・ 式に代入できる型は「byte」,「short」,「int」,「char」のみ
・ 式の値によって処理の開始位置が決まる
breakで{ }を抜ける

 

サンプルコード

package test;

public class Sample {

	public static void main(String[] args) {
		int num = Integer.parseInt(args[0]);
	
		switch(num){
        case 1:
        	System.out.println("週1回コース:7000円");   
            break;
        case 2:
            System.out.println("週2回コース:8000円");  
            break;
        case 3:
            System.out.println("週3回コース:9000円");   
            break;
        default:
        	System.out.println("範囲外の数値が入力されました!");
            System.out.println("週1回コース:1");
            System.out.println("週2回コース:2");
            System.out.println("週3回コース:3");
            System.out.println("の数値から選択してください。");
        }
		//switch文を抜けたのを確認するための処理
		System.out.println("新規ご入会の場合入会料5000円を別途申し受けます。");
    }
}

コンソールから1を入力したときの実行結果

週1回コース:7000円
新規ご入会の場合入会料5000円を別途申し受けます。

出力結果を見てわかるようにsum変数(処理)が1だったら
1の結果が実行され2と3の処理はは飛ばされswitch文を抜けた後の最後処理が実行されています。

コンソールから4を入力したときの実行結果

範囲外の数値が入力されました!
週1回コース:1
週2回コース:2
週3回コース:3
の数値を入力してください。 新規ご入会の場合入会料5000円を別途申し受けます。

処理4の場合は1~3にに該当しないためdefault(その他の処理)とswitch文を抜けた後の処理が実行されています。

複数の処理を実行したいとき

breakを記述しなければ、複数の処理を実行できます。

試しにbreakを外して実行してみます。

package test;

public class Sample {

	public static void main(String[] args) {
		int num = Integer.parseInt(args[0]);
	
		switch(num){
        case 1:
        	System.out.println("週1回コース:7000円");   
        case 2:
            System.out.println("週2回コース:8000円");  
        case 3:
            System.out.println("週3回コース:9000円");   
            break;
        default:
        	System.out.println("範囲外の数値が入力されました!");
            System.out.println("週1回コース:1");
            System.out.println("週2回コース:2");
            System.out.println("週3回コース:3");
            System.out.println("の数値から選択してください。");
        }
		//switch文を抜けたのを確認するための処理
		System.out.println("新規ご入会の場合入会料5000円を別途申し受けます。");
    }
}

コンソールから1を入力した場合の実行結果

週1回コース:7000円
週2回コース:8000円
週3回コース:9000円
新規ご入会の場合入会料5000円を別途申し受けます。

処理1と処理2が実行され最後のswitch文を抜けた後の処理が実行されています。

コンソールから2を入力した場合の実行結果

週2回コース:8000円
週3回コース:9000円
新規ご入会の場合入会料5000円を別途申し受けます。

処理1が飛ばされ処理2~3と最後のswitch文を抜けた後の処理が実行されています。

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/java_switch/feed/ 0
マイツールのオートプログラムは難しい? https://wpchiraura.xyz/my_tool_auto_program/ https://wpchiraura.xyz/my_tool_auto_program/#respond Mon, 31 Jul 2023 15:01:18 +0000 https://wpchiraura.xyz/?p=3076 最近暑い日々が続きますね~☀💦

今日は、ちょっとしたマメ知識を!

オートプログムは難しい?

いえいえそんなことはないですよ!
元々素人でも使えるようにと開発されたソフトだけあって便利なコマンドや機能がありましたので、今回は少しご紹介したい思います!

マイツールを使い始める前、使ったことがあったのは、会社のオフコンのみで、PCは使ったことないド素人でしたが、1年程で請求書の発行、現預金出納帳、入金管理、売掛明細等までは作ることができましたので、きっとできると思います!

当時勤務していた業界の、仕事の流れは頭に入っていたからかもしれませんが

余談はさておき・・

マイツールのオートプログラムは組み合わせ方によっては、案外容易に作り出すことができます。

例えば、CNCEFDF命令などがあれば、PythonやJAVAみたいに沢山のコードを書かずとも作り上げてしまえるのが魅力です。

特にCNCはIF文を沢山入れ子しないと作れないようなものでも、処理内容に沢山の条件を書いたCNCのページで計算してもらえばいいですので一押しのコマンドです!

セミオートとオートプログラムどちらを選択すべきか?

マイツールをどのように使うか?
・個々にコマンドを打てるようにしたい。
・製造する人はコマンドを使用するけど、使う人はコマンドを使かわないようにする。

まずはこの2通りの区別からですけど、前者ならセミオートを沢山作るて使うのがオススメ!
後者であれば、間違ってプログラムファイルに書き込まれたり削除されないようにプロテクトを掛けてしまう方法もあります。システムが動かなくなったりすると大変ですからプログラム内は担当者しか扱えないようにするのが賢明かと思います。あくまでも個人的な見解ですので参考にまで・・
オートプログラムもセミオートの繋ぎ合わせ方をちょっと工夫すれば作れちゃいからね!

オートプログラムを作るに当たって

私は、まず基本となるベースのデータ格納場所を考え、ベースとなる(売上関係)変動のあるページにはV型ファイルを使用しEFデザイン画面で直接書き込み、DF画面より修正するようにしていました。変動のあるページにV型ファイルを使う方が、データ容量の節約になりますし32,000ページを超えるとマイツールは止まってしまうらしいので気を付けたいですね。
※バックアップを取り、すぐに使用しないデータは外付けのHDDなどに退避しPCのデータ容量を削減するのもオススメです。

データ集計のときは別のV型ファイルで集計をし、再集計可能なように〆ごと・月ごとに保存するファイルの領域を別途確保

集計に当たってのマメ知識

集計の実行後には、「集計をしますがよろしいですか?」などのメッセージを画面に出力し、Y/Nの選択方法を使用。
Yなら集計に進む Nなら、集計を止めて元の画面に戻る!みたいな感じですね・・

ここで、どの言語でも使うIF文の登場ですね!

※操作する人が間違って選択しても前画面に戻れますので。

実際にPCを使用する人の基本操作は・・

マウス操作はマイツール起動時の一回のみで、キーポードの操作で全て入力が終わるように、コード入力方式を使用。
※誤動作防止にもつながります。

最後に・・

会社合併後にシステム移行となりマイツールから離れ、約15年程経ちますが今でも、マイツール大好きです!

マイツールを使われている企業様が近くにあったら、トラバーユしたいくらい大好きです(笑)

それでは、マイツールユーザーさん頑張りましょう!

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/my_tool_auto_program/feed/ 0
【Java】if文で条件分岐(定数・四捨五入)含む https://wpchiraura.xyz/if_statement-constant-rounding_off/ https://wpchiraura.xyz/if_statement-constant-rounding_off/#respond Sun, 30 Jul 2023 10:41:03 +0000 https://wpchiraura.xyz/?p=3207 if文の書き方

 

if(条件式1){
処理1
}else if (条件式2){
処理2
}else{
処理3
}

以下の条件式は、以下の条件で、値引き金額と税込み金額を表示するプログラムです。

5000円以上の購入  =11%値引き
4000円以上購入の購入=10%値引き
4000円未満の購入  =値引きなし

コンソールからの値を受け取るInteger.parseInt

6行目のInteger.parseIntは、コンソールからの値を受け取りprice変数に代入。

定数 final

7行目のRATE変数はfinal をつけてdouble型で消費税率が変わらないように定数として設定

8行目の discount, amount 変数は、値引き額値引き額と税込み金額なのなのでint型で指定

Math.round関数で四捨五入

コンソールから受け取ったprise変数で値引き率を計算

Math.round関数で四捨五入した値をdiscount変数に代入(11・13行目)

17行目で税込み金額を計算
18~19行目で値引き金額と税込み金額をコンソールに出力しています。

package test;

public class Sample {

	public static void main(String[] args) {
		int price = Integer.parseInt(args[0]);
		final double RATE = 0.10; // 消費税率:10%;
		int discount, amount;
        // 値引額の条件指定
		if (price >= 5000) { 
			discount = (int) Math.round(price * 0.11); // 5000円以上の値引き率
		} else if (price >= 4000) {
			discount = (int) Math.round(price * 0.10); // 4000円以上の値引き率
		} else {
			discount = 0;
		}
		amount = (int) ((price - discount) * (RATE +1));
		System.out.println("値引金額:" + discount + "円");
		System.out.println("税込金額:" + amount + "円");
	}

コンソールから3000と入力した場合の出力結果

値引金額:0円
税込金額:3300円

コンソールから4500と入力した場合の出力結果

値引金額:値引金額:450円
税込金額:4455円

コンソールから6000と入力した場合の出力結果

値引金額:値引金額:660円
税込金額:5874円

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/if_statement-constant-rounding_off/feed/ 0
【Java】演算子の優先順位と基本データ型の型変換 https://wpchiraura.xyz/operato-precedence-and-type-conversion/ https://wpchiraura.xyz/operato-precedence-and-type-conversion/#respond Sun, 30 Jul 2023 04:16:57 +0000 https://wpchiraura.xyz/?p=3176 演算子の優先順位

下表は優先順位が高い順

++ , -- +1,-1 インクリメント演算子
a++ → aに1を加える
デクリメント演算子
a-- → aから1を引く
* , /  , % ×,÷,余り 算術演算子
7*2→14 , 7/2→3 , 7%2→1
7+2→9 , 7-2→5
+ , - +,-
<> , <= , >= 大小比較 関係演算子
a>=0→aが0以上ならtrue
== , != 等しいか 関係演算子
a==b→aとbが等しければtrue
&& , || かつ,または 論理演算子
(a>=0)&&(b>=0)
aが0以上かつbが0以上ならばtrue
= 代入 代入演算子
a = b → bをaに代入
+= , -=,*= , /= , %= 複合代入 複合代入演算子
a + = →  a=a+bと同じ

※関係演算子・論理演算子の結果は必ずteueかfalseが返されます。

以下に実行時のコードを記載します。

package test;

public class sample {

	public static void main(String[] args) {
		// 使用する変数の定義
		int a = 8, b = 2; // 変数の宣言

		// 普通の演算による計算と代入
		System.out.println("a + b = " + (a + b));
		System.out.println("a - b = " + (a - b));
		System.out.println("a * b = " + (a * b));
		System.out.println("a / b = " + (a / b));
		System.out.println("a % b = " + (a % b));
		System.out.println("a >= b = " + (a >= b));
		System.out.println("(a >= 0) && (b >= 3):" + ((a >= 0) && (b >= 3)));
		System.out.println("(a >= 0) || (b >= 3):" + ((a >= 0) || (b >= 3)));
		// 代入演算による計算
		System.out.println("代入演算による計算");
		System.out.println("a += b = " + (a += b));
		System.out.println("a -= b = " + (a -= b));
		System.out.println("a *= b = " + (a *= b));
		System.out.println("a /= b = " + (a /= b));
		System.out.println("a %= b = " + (a %= b));
	}
}

計算結果

a + b = 10
a - b = 6
a * b = 16
a / b = 4
a % b = 0
a >= b = true
(a >= 0) && (b >= 3):false
(a >= 0) || (b >= 3):true
代入演算による計算
a += b = 10
a -= b = 8
a *= b = 16
a /= b = 8
a %= b = 0
コンソールから入力した値を受け取って計算する場合は、
「変数の宣言」の個所に以下のように記述します。
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

基本データ型の型変換とキャスト

キャストなしの型変換

数値同士の演算や代入をする際、表現できる値の幅が小→大の場合は自動的に変換されるので、キャストの明示は不要です。

キャストを明示した型変換

数値同士の演算や代入をする際、表現できる値の幅が大→小の場合キャストで明示します。

例えば32bitのものは64bitで表現できますが、32bitのものを64bitでそのまま表現することできませんので、キャストが必要になります。

double→float

long→int→short→byte

 

整数 byte 8ビット
short 16ビット
int 32ビット
long 64ビット
小数 float 32ビット
double 64ビット

 

以下は、floatからlongへ型変換可能か試したコードと結果です。

使用するとすれば、doubleからintへの型変換で使うのでしょうが、興味本位で試してみました。

package test;
 
public class Sample {
 
   public static void main(String[] args){
	    int price = Integer.parseInt(args[0]);
	    float rate = 0.08f;         // 消費税率:8%
	    long amount;

	    amount = (long)(price * (1 + rate));
	    System.out.println("税込金額:" + amount + "円");
	  }
}

コンソールから1980と入力した出力結果型変換は可能でした。

税込金額:2138円

にほんブログ村 IT技術ブログ IT技術メモへ

]]>
https://wpchiraura.xyz/operato-precedence-and-type-conversion/feed/ 0
【Java】配列・多次元配列と初期化 https://wpchiraura.xyz/arrays-and-multidimensional-arrays/ https://wpchiraura.xyz/arrays-and-multidimensional-arrays/#respond Sat, 29 Jul 2023 05:22:22 +0000 https://wpchiraura.xyz/?p=3151 配列とは

配列は同じデータ型の変数を複数まとめて管理するもの

配列の生成

配列の生成にはnewを使います。
※生成時にデフォルトで初期値が設定される。

デフォルトで設定される初期値

整数・小数 = 0
文字          = 空文字(‘ ‘)
真偽地       = false

書き方
データ型[ ]配列名 = new データ型[要素数];
例: int[]a = new int[5];

以下のプログラムは配列変数aに5つの配列を作って、格納された数値から合計値と平均値を表示するプログラム

package test;
 
public class Sample {
 
    public static void main(String[] args) {
         int[] a = new int[5];
         int sum,avg; //  合計値、平均値を入れる変数
         //  値を代入
         a[0] = 1;
         a[1] = 10;
         a[2] = 5;
         a[3] = 2;
         a[4] = 3;
     // 合計値
         sum = 0.0;
         //配列の要素数を取得して合計値を表示
         for(int i = 0; i < a.length; i++){
             System.out.print(a[i] + " ");
             sum += a[i];
        }
        System.out.println();
        avg = sum / 5.0;
        System.out.println("合計値:" + sum);
        System.out.println("平均値:" + avg);
    }
}

配列名.lengthと記述すると配列の要素数を取得することができます。

配列の初期化

書き方
データ型 配列名[ ] = {値1,値2,値3,値4,値5}
例:int number[] = {1,2,3,4,5};

 

package test;
public class Sample {
	 
    public static void main(String[] args) {
        int number[] = { 1,2,3,4,5 };
        String letter[] = {"Hello","World","!" };
        int i;
        //  整数型配列変数number表示
        for(i = 0; i < number.length; i++){
            System.out.print(number[i]+" ");
        }
        System.out.println();
        //  文字列型配列変数letterの表示
        for(i = 0; i < letter.length; i++){
            System.out.print(letter[i]+" ");
        }
        System.out.println();
    }
}

多次元配列

配列の配列をつくる
マンションで例えるなら2階建て3部屋のイメージ

 

多次元配列の生成

package test;

public class Sample {
	 
	public static void main(String[] args){
		//2行3列の多次元配列の生成
	    int[][] points = new int[2][3];
	    //データの代入
	    points[0][0] = 50;
	    points[0][1] = 60;
	    points[0][2] = 70;
	    points[1][0] = 75;
	    points[1][1] = 85;
	    points[1][2] = 95;
	    
	    //配列の中身の表示
	    System.out.println(points[0][0] + "点");
	    System.out.println(points[0][1] + "点");
	    System.out.println(points[0][2] + "点");
	    System.out.println(points[1][0] + "点");
	    System.out.println(points[1][1] + "点");
	    System.out.println(points[1][2] + "点");
	    
	    System.out.println("points.length:" + points.length);
	    System.out.println("points[0].length:" + points[0].length);
	    System.out.println("points[1].length:" + points[1].length);
	  }
}

抽出結果

50点
60点
70点
75点
85点
95点
points.length:2
points[0].length:3
points[1].length:3

 

多次元配列の初期化

int[][] points = {{50,60,70}{75.85.95}};

コード量が少なくてすみますね。

package test;

public class Sample {
	 
	public static void main(String[] args){
		 	    
	    // 多次元配列の初期化
	    int[][] points = { {50, 60, 70}, {75, 85, 95} };
	    //配列の中身の表示
	    System.out.println(points[0][0] + "点");
	    System.out.println(points[0][1] + "点");
	    System.out.println(points[0][2] + "点");
	    System.out.println(points[1][0] + "点");
	    System.out.println(points[1][1] + "点");
	    System.out.println(points[1][2] + "点");
	    
	    System.out.println("points.length:" + points.length);
	    System.out.println("points[0].length:" + points[0].length);
	    System.out.println("points[1].length:" + points[1].length);
	    
	  }
}
]]>
https://wpchiraura.xyz/arrays-and-multidimensional-arrays/feed/ 0
Eclipseを使ったJavaとMySQLの連携 https://wpchiraura.xyz/eclipse_and_mysql_integration/ https://wpchiraura.xyz/eclipse_and_mysql_integration/#respond Sun, 23 Jul 2023 14:15:04 +0000 https://wpchiraura.xyz/?p=3125 MySQLのJDBCドライバーを入手

MySQLの公式ホームページの「JDBC Driver for MySQL (Connector/J)」を押下

 


MySQL Community Downloadsのページへ遷移しますので、プルダウンメニューから

「Platform Indepentdent」を選択します。


私は、ZIPファイルを押下。
因みに、右上の「Archives」を押下すると、古いバージョンもダウンロード可能です。


No thanks, just start my download.」を押下して、ダウンロードは完了

 

まず、ダウンロードしたZIPファイルを展開しておきましょう。
展開した中に jar ファイルがありますのでこれをEclipsに使用します。

Eclipsに接続環境を作る

javaアプリケーションでMySQLに接続する環境を作る
ダウロードしたjarファイルをEclipsの「lib」フォルダの配下にドラッグ&ドロップで配置します。
※私はMySQLの環境に合わせて、8.0.31をダウンロードしましたので、以下から説明のバージョンが異なります。

クラスパスの追加

プロジェクト「java_mysql」を右クリック→「プロパティ」の順に押下

 

「javaのビルド・パス」→「ライブラリー」→「クラスパス」→「JARの追加」の順の押下

 

先程配置した「mysql-connector-j-8.0.31.jar」ファイルを選択して「OK」を押下

「mysql-connector-j-8.0.31.jar」が追加されているのを確認して「適用して閉じる」を押下

これで、ビルド環境が整いました。

]]>
https://wpchiraura.xyz/eclipse_and_mysql_integration/feed/ 0