CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

Gnu COBOL2.2でWebアプリを作る計画

2024-12-01 09:23:34 | COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. WRITE-HTML.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT HTML-FILE ASSIGN TO "output.html"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD HTML-FILE.
01 HTML-LINE PIC X(255).

WORKING-STORAGE SECTION.
01 WS-CRLF PIC X(2) VALUE X"0D0A".

PROCEDURE DIVISION.
MAIN.
OPEN OUTPUT HTML-FILE
MOVE "Content-type: text/html" TO HTML-LINE
WRITE HTML-LINE
MOVE "<!DOCTYPE html>" TO HTML-LINE
WRITE HTML-LINE
MOVE "<html lang=""ja"">" TO HTML-LINE
WRITE HTML-LINE
MOVE "<head>" TO HTML-LINE
WRITE HTML-LINE
MOVE "<meta charset=""UTF-8"">" TO HTML-LINE
WRITE HTML-LINE
MOVE "<title>タイトル</title>" TO HTML-LINE
WRITE HTML-LINE
MOVE "</head>" TO HTML-LINE
WRITE HTML-LINE
MOVE "<body>" TO HTML-LINE
WRITE HTML-LINE
MOVE "Hello HTML!" TO HTML-LINE
WRITE HTML-LINE
MOVE "</body>" TO HTML-LINE
WRITE HTML-LINE
MOVE "</html>" TO HTML-LINE
WRITE HTML-LINE
CLOSE HTML-FILE
DISPLAY "HTML file 'output.html' has been written successfully."
STOP RUN.

何をやろうとしているのかというと、

<!DOCTYPE html>
<html lang=""ja"">
<head>
<meta charset=""UTF-8"">
<title>タイトル</title>
</head>
<body>
Hello HTML!
</body>
</html>

というHTMLタグをGnu COBOL2.2で書いたプログラムを動かしてテキストファイルに書き込ませ、htmlファイルに変換してHello HTML!という文字を表示させる簡単なWebアプリを作ることだ。

まず、Androidのコードエディタに上記のソースコードをコピペし、




実行ボタンを押してみた。




結果は失敗。



出来てもいないのにHTML file 'output.html' has been written successfully.と表示して終了するインチキプログラムであった。
ちなみにこのプログラムの作成者はChatGPTだ。

ちなみにタグ自体を表示するプログラムはうまくいったのだが。

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO_HTML.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CR PIC X VALUE LOW-VALUE.
PROCEDURE DIVISION.
MAIN.
MOVE FUNCTION CHAR(13) TO CR
DISPLAY "Content-type: text/html" UPON CONSOLE
DISPLAY CR UPON CONSOLE
DISPLAY "<!DOCTYPE html>" UPON CONSOLE
DISPLAY "<html lang=""ja"">" UPON CONSOLE
DISPLAY "<head>" UPON CONSOLE
DISPLAY "<meta charset=""UTF-8"">" UPON CONSOLE
DISPLAY "<title>タイトル</title>" UPON CONSOLE
DISPLAY "</head>" UPON CONSOLE
DISPLAY "<body>" UPON CONSOLE
DISPLAY "Hello HTML!" UPON CONSOLE
DISPLAY "</body>" UPON CONSOLE
DISPLAY "</html>" UPON CONSOLE
STOP RUN.











Gnu COBOL2.2でFIZZBUZZ問題をやってみた。

2024-12-01 08:45:17 | COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. FIZZBUZZ.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 9(3).
01 HENSHU-IKI PIC X(4).
01 HENSHU-NUM REDEFINES HENSHU-IKI PIC X(4).
01 DUMMY-IKI PIC X(1).

PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100
EVALUATE TRUE
WHEN FUNCTION MOD(I 3) = 0 AND FUNCTION MOD(I 5) = 0
DISPLAY "FIZZBUZZ"
WHEN FUNCTION MOD(I 3) = 0
DISPLAY "FIZZ"
WHEN FUNCTION MOD(I 5) = 0
DISPLAY "BUZZ"
WHEN OTHER
MOVE SPACES TO HENSHU-IKI
MOVE I TO HENSHU-NUM
UNSTRING
HENSHU-IKI DELIMITED BY ALL SPACE
INTO DUMMY-IKI HENSHU-IKI
END-UNSTRING
DISPLAY FUNCTION TRIM(HENSHU-IKI)
END-EVALUATE
END-PERFORM.
STOP RUN.








COBOLでGUIアプリは可能か?その2

2024-07-05 23:45:32 | COBOL


identification division.
program-id. CALL-TEST.
data division.
working-storage section.
01 numeri PIC 9(4).
procedure division.
move 0721 to numeri.
call 'sub1' using by value numeri.
display "Hello After C".
stop run.

jsコードは省略。


COBOLでGUIアプリは可能か?

2024-07-05 23:18:12 | COBOL
COBOLでGUIアプリを作りたい。例えば四則演算電卓のCOBOLソースを書いて。

【ChatGPT】
COBOL自体は古いプログラミング言語であり、GUIアプリケーションの開発には通常向いていません。COBOLでGUIを作成する場合、外部のライブラリやツールキットを利用する必要があります。例えば、COBOLコードを使ってJavaやC#のGUIコンポーネントを操作する方法が考えられます。

ここでは、COBOLのGUIアプリケーションの例として、四則演算電卓の簡単なサンプルを示します。この例では、COBOLプログラムがバックエンドのロジックを処理し、GUI部分はJavaを使って実装しています。以下にその例を示します。

【COBOLソースコード (Calculator.cbl)】

IDENTIFICATION DIVISION.

PROGRAM-ID. Calculator.


DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-NUM1 PIC 9(5)V9(2).

01 WS-NUM2 PIC 9(5)V9(2).

01 WS-RESULT PIC 9(5)V9(2).


LINKAGE SECTION.

01 LK-NUM1 PIC 9(5)V9(2).

01 LK-NUM2 PIC 9(5)V9(2).

01 LK-OPERATION PIC X.

01 LK-RESULT PIC 9(5)V9(2).


PROCEDURE DIVISION USING LK-NUM1 LK-NUM2 LK-OPERATION LK-RESULT.

MOVE LK-NUM1 TO WS-NUM1

MOVE LK-NUM2 TO WS-NUM2

EVALUATE LK-OPERATION

WHEN '+'

COMPUTE WS-RESULT = WS-NUM1 + WS-NUM2

WHEN '-'

COMPUTE WS-RESULT = WS-NUM1 - WS-NUM2

WHEN '*'

COMPUTE WS-RESULT = WS-NUM1 * WS-NUM2

WHEN '/'

IF WS-NUM2 NOT = 0

COMPUTE WS-RESULT = WS-NUM1 / WS-NUM2

ELSE

MOVE 0 TO WS-RESULT

END-IF

WHEN OTHER

MOVE 0 TO WS-RESULT

END-EVALUATE

MOVE WS-RESULT TO LK-RESULT

GOBACK.

END PROGRAM Calculator.

Gooブログの糞仕様でJavaのコードは書けないらしい。
【Java GUIコード (CalculatorGUI.java)】
i m p o r t j a v a . a w t . * ; i m p o r t j a v a . a w t . e v e n t . * ; i m p o r t j a v a x . s w i n g . * ; i m p o r t j a v a . n i o.file.*; p ublic class C alculatorGUI { static{ S ystem.loadLibrary("Calculator"); } p ublic native float calculate(float num1, float num2, char operation); p ublic static void main(String[] args) { JFrame frame = new JFrame("COBOL Calculator"); f rame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f rame.setSize(300, 300); JTextField num1Field = new JTextField(10); JTextField num2Field = new JTextField(10); JTextField r esultField = new JTextField(10); r esultField.setEditable(false); String[] operations = {"+", "-", "*", "/"}; J ComboBox<String> operationBox = new J ComboBox<>(operations); J Button c alculateButton = new J Button("Calculate"); c alculateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try {float num1 = F loat.parseFloat(num1Field.getText()); float num2 = F loat.parseFloat(num2Field.getText()); c har operation = ((String) operationBox.getSelectedItem()).charAt(0); CalculatorGUI calc = new C alculatorGUI(); float result = c alc.calculate(num1, num2, operation); r esultField.setText(String.valueOf(result));} c atch (NumberFormatException ex) { r esultField.setText("Error"); } } }); J Panel panel = new JPanel(); p anel.add(new JLabel("Num 1:")); p anel.add(num1Field); p anel.add(new J Label("Operation:")); p anel.add(operationBox); p anel.add(new J Label("Num 2:")); p anel.add(num2Field); p anel.add(calculateButton); p anel.add(new JLabel("Result:")); p anel.add(resultField); f rame.add(panel); f rame.setVisible(true); } }

ビルドと実行手順

  1. COBOLコードをコンパイルして、動的ライブラリ(例:.so.dllなど)を生成します。
  2. Javaコードをコンパイルして実行します。

これらの手順は環境によって異なりますが、以下は一般的な手順です。

1.COBOLコードのコンパイル:

cobc -m -o Calculator.so Calculator.cbl

2.Javaコードのコンパイルと実行:
javac CalculatorGUI.java
java -Djava.library.path=. CalculatorGUI

この例では、COBOLの計算ロジックをJavaのGUIから呼び出しています。COBOLとJavaのインターフェースを作成するために、Java Native Interface (JNI) を使用しています。これにより、COBOLの強力なバックエンドロジックとJavaの柔軟なGUIを組み合わせたアプリケーションが作成できます。


株式会社COBOLの求人

2024-06-30 21:42:53 | COBOL


代表取締役社長の北川達也氏



応募資格

COBOLでの実務開発経験がある方は優遇します。
※学歴不問。前向きな気持ちがあれば、
未経験者可。

【こんな方は特に歓迎します】
◎COBOLでの開発実務経験が3ヶ月以上ある方
◎「経歴はあるけれど、自信が持てない」という方

お勧めの本など紹介している。
勉強してから応募してみたいのだが、その頃にはもう締切っているかもしれない。

COBOL埋め込みSQLの例をChatGPTに書かせた。

2024-05-11 12:48:55 | COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SQL-STATEMENT PIC X(100).
01 SQL-RESULT PIC S9(4) COMP.

PROCEDURE DIVISION.
MAIN-PROCEDURE.
MOVE "SELECT * FROM EMPLOYEES WHERE DEPARTMENT = 'SALES'" TO SQL-STATEMENT.
EXEC SQL
PREPARE SQL-STATEMENT
END-EXEC.
EXEC SQL
OPEN EMPLOYEE-CURSOR
END-EXEC.
EXEC SQL
FETCH NEXT FROM EMPLOYEE-CURSOR INTO :EMPLOYEE-ID, :EMPLOYEE-NAME
END-EXEC.
PERFORM UNTIL SQL-RESULT = 100
DISPLAY "EMPLOYEE ID: " EMPLOYEE-ID " EMPLOYEE NAME: " EMPLOYEE-NAME
EXEC SQL
FETCH NEXT FROM EMPLOYEE-CURSOR INTO :EMPLOYEE-ID, :EMPLOYEE-NAME
END-EXEC.
END-PERFORM.
EXEC SQL
CLOSE EMPLOYEE-CURSOR
END-EXEC.
STOP RUN.

このプログラムは、部署が "SALES" の従業員を表示する単純な例です。SQL文は文字列変数SQL-STATEMENTに格納され、EXEC SQLステートメントによって実行されます。このコードは、実際のデータベース接続や設定には関係なく、SQL文の埋め込み方法を示しています。

実際には、プログラム内で使用するデータベースにアクセスするためには、データベース接続情報などの追加の設定が必要です。また、プリプロセッサを使用してCOBOLプログラムを生成するための手順もありますが、この手順はCOBOLの特定のコンパイラに依存します。

とのこと。

https://amzn.asia/d/8BeCip1

COBOLエンジニアのためのOracle/SQLレッスン

という本のレビュー覧で「COBOL埋め込みSQL」という文言が出てきたので、気になっていた。

レビューではさんざんなことが書かれていたが、このレビューをきっかけにPython埋め込みVisualBasic.netとかいろいろ閃いた。

さらにこんな情報も・・・

https://itpfdoc.hitachi.co.jp/manuals/3020/30203D6240/USR20403.HTM

https://software.fujitsu.com/jp/manual/manualfiles/M080271/J2X02268/06Z201/aplsq03/aplsq062.html

https://software.fujitsu.com/jp/manual/manualfiles/m140016/j2ul1756/03z200/j2ul-1756-03z0.pdf

Googleで「cobol 埋め込みsql」と入力して検索すべし。

【追伸】

Androidでコンパイルしてみたらエラーとなった。

main.cob: 20: warning: line not terminated by a newline

main.cob: 1: error: PROGRAM-ID header missing

main.cob: 1: error: ENVIRONMENT DIVISION header missing

main.cob: 1: error: CONFIGURATION SECTION header missing

main.cob: 1: error: SPECIAL-NAMES header missing

main.cob: 1: error: invalid system-name 'WHERE'

main.cob: 1: error: syntax error, unexpected =