<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>COBOLプログラミング入門</title>
	<atom:link href="http://tallercolibri.com/feed" rel="self" type="application/rss+xml" />
	<link>http://tallercolibri.com</link>
	<description>COBOLプログラミングについてはじめての方でもわかるように図解を取り入れわかりやすく解説しているCOBOL入門サイトです。</description>
	<lastBuildDate>Tue, 08 Jun 2021 15:22:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.3</generator>
	<item>
		<title>定数の種類</title>
		<link>http://tallercolibri.com/archives/145</link>
		<comments>http://tallercolibri.com/archives/145#respond</comments>
		<pubDate>Wed, 02 May 2012 02:22:25 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[データ定義（変数）]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[VALUE]]></category>
		<category><![CDATA[定数]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=145</guid>
		<description><![CDATA[COBOLでは、プログラム中に記述したデータを定数と呼びます。 定数は、数値定数、文字定数、表意定数の3つに分けることができます。 数値定数 プログラム中に記述した数値データを「数値定数」と言います。 数値定数は、符号( &#8230; <a href="http://tallercolibri.com/archives/145">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
COBOLでは、プログラム中に記述したデータを定数と呼びます。<br />
<br />
定数は、数値定数、文字定数、表意定数の3つに分けることができます。</p>
<br />
<div class="subtitle01">数値定数</div>
<p>プログラム中に記述した数値データを「数値定数」と言います。<br />
数値定数は、符号(+/-)、数字(0～9)、小数点(.)を組み合わせて記述します。<br />
ただし、プラス値を表すときは符号(+)を省略できます。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-14.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-NUMBER    PIC 9(5).
000090 01 WRK-PAI       PIC 9V9(4).
000100 01 WRK-MINUS     PIC S9(5).
000110*
000120 PROCEDURE DIVISION.
000130 MAIN.
000140     MOVE 12345    TO WRK-NUMBER.
000150     MOVE 3.1415   TO WRK-PAI.
000160     MOVE -12345   TO WRK-MINUS.
000170*
000180     DISPLAY "WRK-NUMBER[" WRK-NUMBER "]".
000190     DISPLAY "WRK-PAI[" WRK-PAI "]".
000200     DISPLAY "WRK-MINUS[" WRK-MINUS "]".
000210     STOP RUN.</pre>
<br />
実行結果<br />
<pre>WRK-NUMBER[12345]
WRK-PAI[3.1415]
WRK-MINUS[-12345]</pre>
<br />
<p>なお、数値定数の最大桁数は18桁(整数部・小数部の合計)と決められています。</p>
<br />
<br />
<div class="subtitle01">文字定数</div>
<p>プログラム中に記述した文字データを「文字定数」と言います。<br />
文字定数を記述するときは、前後をダブルクォーテーション(&#8220;)もしくはシングルクォーテーション(&#8216;)で括ります。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-15.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-STRING      PIC X(5).
000090 01 WRK-NUMSTRING   PIC X(5).
000100 01 WRK-HEXASCII    PIC X(3).
000110*
000120 PROCEDURE DIVISION.
000130 MAIN.
000140     MOVE "ABCDE"    TO WRK-STRING.
000150     MOVE "12345"    TO WRK-NUMSTRING.
000160     MOVE X"414243"  TO WRK-HEXASCII.
000170*
000180     DISPLAY "WRK-STRING[" WRK-STRING "]".
000190     DISPLAY "WRK-NUMSTRING[" WRK-NUMSTRING "]".
000200     DISPLAY "WRK-HEXASCII[" WRK-HEXASCII "]".
000210     STOP RUN.</pre>
<br />
実行結果<br />
<pre>WRK-STRING[ABCDE]
WRK-NUMSTRING[12345]
WRK-HEXASCII[ABC]</pre>
<br />
<p>内容が数値だとしても、ダブルクォーテーション（もしくはシングルクォーテーション）で括れば、文字定数として扱われます。<br />
また、文字を16進文字コードで記述することもできます。<br />
その場合は、ダブルクォーテーションの前に「X」を記述します。<br />
<br />
なお、文字定数の最大長は160文字(160バイト)となります。</p>
<br />
<br />
<div class="subtitle01">表意定数</div>
<p>COBOLには、数値のゼロや文字のスペースなどを表す特殊な定数があります。<br />
それらを「表意定数」と言います。</p>
<br />
表意定数の種類<br />
<table class="list_table"><tr><th>値</th><th>意味</th><th>形式</th></tr>
<tr><td>ZERO,ZEROS,ZEROES</td><td>n個の0を意味する</td><td>数値</td></tr>
<tr><td>SPACE,SPACES</td><td>n個の空白を意味する</td><td>文字</td></tr>
<tr><td>QUOTE,QUOTES</td><td>領域全体を引用符(&#8220;)で埋める</td><td>文字</td></tr>
<tr><td>HIGH-VALUE,HIGH-VALUES</td><td>領域全体をFFで埋める</td><td>文字</td></tr>
<tr><td>LOW-VALUE,LOW-VALUES</td><td>領域全体を00で埋める</td><td>文字</td></tr>
<tr><td>ALL定数</td><td>指定した文字定数を領域全体に埋める</td><td>文字</td></tr></table>
<br />
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-16.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-NUMBER      PIC 9(5).
000090 01 WRK-STRING      PIC X(5).
000100 01 WRK-ASTRING     PIC X(5).
000110*
000120 PROCEDURE DIVISION.
000130 MAIN.
000140     MOVE ZERO      TO WRK-NUMBER.
000160     MOVE SPACE     TO WRK-STRING.
000160     MOVE ALL "A"   TO WRK-ASTRING.
000170*
000180     DISPLAY "WRK-NUMBER[" WRK-NUMBER "]".
000190     DISPLAY "WRK-STRING[" WRK-STRING "]".
000200     DISPLAY "WRK-ASTRING[" WRK-ASTRING "]".
000210     STOP RUN.</pre>
<br />
<pre>WRK-NUMBER[00000]
WRK-STRING[     ]
WRK-ASTRING[AAAAA]</pre>
<br />
<br />
<div class="subtitle01">データ項目の初期値を定義する</div>
<p>上記サンプルではMOVE文による定数の転記方法を紹介していますが、データ定義時に各データ項目に初期値を設定することも可能です。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-17.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 WRK-NUMBER      PIC 9(5) VALUE 12345.
000090 01 WRK-STRING      PIC X(5) VALUE "ABCDE".
000100*
000110 01 WRK-DATA       VALUE "12345ABDCE".
000120    03 WRK-ITEM1    PIC 9(5).
000130    03 WRK-ITEM2    PIC X(5).
000140*
000150 PROCEDURE DIVISION.
000160 MAIN.
000170     DISPLAY "WRK-NUMBER[" WRK-NUMBER "]".
000180     DISPLAY "WRK-STRING[" WRK-STRING "]".
000190*
000200     DISPLAY "WRK-ITEM1[" WRK-ITEM1 "]".
000210     DISPLAY "WRK-ITEM2[" WRK-ITEM2 "]".
000220     STOP RUN.</pre>
<br />
実行結果<br />
<pre>WRK-NUMBER[12345]
WRK-STRING[ABCDE]
WRK-ITEM1[12345]
WRK-ITEM2[ABDCE]</pre>
<br />
<p>データ項目に初期値を設定するにはVALUE句を使用します。<br />
VALUE句を使用した初期値の設定は、プログラム内で値が常に同じである場合は非常に便利な方法です。</p>
<p>VALUE句は基本項目だけでなく集団項目にも指定できます。<br />
その場合、その集団項目配下の集団項目や基本項目にはVALUE句を指定できません。<br />
また、初期値の長さは集団項目配下の全基本項目以下にする必要があります。<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/145/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>データ項目の定義方法(PICTURE句)</title>
		<link>http://tallercolibri.com/archives/140</link>
		<comments>http://tallercolibri.com/archives/140#respond</comments>
		<pubDate>Tue, 01 May 2012 13:49:29 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[データ定義（変数）]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[PICTURE]]></category>
		<category><![CDATA[データ項目]]></category>
		<category><![CDATA[基本項目]]></category>
		<category><![CDATA[変数]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=140</guid>
		<description><![CDATA[前回までの記事でCOBOLプログラム上でのデータ定義の基本について見てきました。 今回はサンプルソースとその実行結果からデータ定義について見ていきます。 データ定義はデータ部（DATA DIVISION）の作業場所節（W &#8230; <a href="http://tallercolibri.com/archives/140">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
前回までの記事でCOBOLプログラム上でのデータ定義の基本について見てきました。<br />
今回はサンプルソースとその実行結果からデータ定義について見ていきます。</p>
<br />
<p>データ定義はデータ部（DATA DIVISION）の作業場所節（WORKING-STORAGE SECTION）で行います。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-13.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 01 A PICTURE 9(5).
000090 01 B PICTURE ZZZZ9.
000110 01 C PICTURE S9(5).
000120 01 D PICTURE X(5). 
000130*
000140 PROCEDURE DIVISION.
000150 MAIN.
000160     MOVE 100 TO A B C.
000170     MOVE "00100" TO D.
000180     DISPLAY "A[" A "]". 
000190     DISPLAY "B[" B "]".
000200     DISPLAY "C[" C "]".
000210     DISPLAY "D[" D "]".
000220     STOP RUN.</pre>
<br />
実行結果<br />
<pre>A[00100]
B[  100]
C[+00100]
D[00100]</pre>
<br />
<p>データ項目のデータ型と長さ（桁数）を指定するには、データ項目名に続けてPICTURE句で行います。</p>
<br />
<dl>
<dt>PICTURE句 書式</dt>
<dd>レベル番号 データ項目名 PICTURE 符号・データ型・長さ・小数.<br />
<br />
・符号　　　数値形式で符号が必要な場合は、Sを記述。<br />
・データ型　X、9、Nなどのタイプ識別子を指定<br />
・長さ　　　タイプ識別子を桁数分続けて記述するか、タイプ名の後に括弧で括って長さを指定<br />
・小数　　　数値項目で小数を扱う場合は、Vに続けて小数部の桁数を指定<br />
</dd>
</dl>
<p>※PICTUREをPICと省略して記述することもできます。</p>
<br />
<p>PICTURE句を使用してデータ型や長さを指定するのは「基本項目」に限ります。<br />
集団項目には使用しません。<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>データ型の種類</title>
		<link>http://tallercolibri.com/archives/132</link>
		<comments>http://tallercolibri.com/archives/132#respond</comments>
		<pubDate>Mon, 30 Apr 2012 06:08:47 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[データ定義（変数）]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[データ型]]></category>
		<category><![CDATA[数値]]></category>
		<category><![CDATA[英数字]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=132</guid>
		<description><![CDATA[前回までの記事で、COBOLプログラム上で使用するデータを定義するときの概念やルールについて見てきました。 今回は、データ型について見ていきます。 データ項目（変数）を定義する際、名前やレベル番号の他に、データ型とデータ &#8230; <a href="http://tallercolibri.com/archives/132">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
前回までの記事で、COBOLプログラム上で使用するデータを定義するときの概念やルールについて見てきました。<br />
今回は、データ型について見ていきます。</p>
<br />
<p>データ項目（変数）を定義する際、名前やレベル番号の他に、データ型とデータ項目の長さ（桁数）も指定します。</p>
<p>COBOLで扱えるデータ型は、<strong>数値形式</strong>、<strong>英数字形式</strong>、<strong>書式編集形式</strong>の3つに大別できます。</p>
<br />
<div class="subtitle01">数値形式</div>
<table class="list_table"><tr><th>タイプ識別子</th><th>内容</th></tr>
<tr><td>9</td><td>数字１桁</td></tr>
<tr><td>S</td><td>符号付きの値（S指定のない項目は正の値として扱う）</td></tr>
<tr><td>V</td><td>小数点の位置</td></tr></table>
<br />
<table class="list_table"><tr><th>記述例</th><th>バイト数</th><th>意味</th></tr>
<tr><td>9(5)</td><td>5バイト</td><td>数字5文字で十進5けたの符号なし整数を表す</td></tr>
<tr><td>9(5)V99</td><td>7バイト</td><td>数字7文字で十進整数部5けた、小数部2けたの符号なし数を表す</td></tr>
<tr><td>S9(5)</td><td>5バイト</td><td>十進5けたの符号あり整数を表す</td></tr></table>
<p>※9(5)と99999は同じ意味。</p>
<br />
<br />
<div class="subtitle01">英数字形式</div>
<table class="list_table"><tr><th>タイプ識別子</th><th>内容</th></tr>
<tr><td>X</td><td>任意の文字( 英字、数字、空白含む)</td></tr></table>
<br />
<table class="list_table"><tr><th>記述例</th><th>バイト数</th><th>意味</td></tr>
<tr><td>X(50)</td><td>50バイト</td><td>英数字50文字</td></tr></table>
<br />
<br />
<div class="subtitle01">書式編集形式</div>
<table class="list_table"><tr><th>タイプ識別子</th><th>内容</th></tr>
<tr><td>Z</td><td>ゼロサプレス。指定した桁数に満たない場合、その部分を空白に置き換える</td></tr>
<tr><td>，</td><td>カンマが挿入される文字位置</td></tr>
<tr><td>.</td><td>位置合わせ用の小数点を表す</td></tr>
<tr><td>\</td><td>通貨記号。ゼロサプレスと同等</td></tr></table>
<br />
<table class="list_table"><tr><th>記述例</th><th>バイト数</th><th>意味</th></tr>
<tr><td>ZZZ,ZZ9</td><td>7バイト</td><td>整数部3けた（ゼロサプレス）＋カンマ＋整数部3けた（ゼロサプレス）</td></tr>
<tr><td>ZZZZZ9.999</td><td>11バイト</td><td>整数部6けた（ゼロサプレス）＋小数点のピリオド＋小数部3けた</td></tr></table>
<br />
<p>データ型の指定とあわせて、データ項目の長さ（桁数）を指定するのがCOBOLの特徴です。<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/132/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>命名規則と特殊なデータ定義</title>
		<link>http://tallercolibri.com/archives/117</link>
		<comments>http://tallercolibri.com/archives/117#respond</comments>
		<pubDate>Fri, 27 Apr 2012 23:41:51 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[データ定義（変数）]]></category>
		<category><![CDATA[77]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[FILLER]]></category>
		<category><![CDATA[命名規則]]></category>
		<category><![CDATA[特殊レベル]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=117</guid>
		<description><![CDATA[データ項目を定義する際、任意の名前を決めることになりますが、命名規則に従って名前を決める必要があります。 COBOLの規格により違いはありますが、代表的な命名規則を下記に示します。 使用できる文字 　・半角英数字 　・半 &#8230; <a href="http://tallercolibri.com/archives/117">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
データ項目を定義する際、任意の名前を決めることになりますが、命名規則に従って名前を決める必要があります。<br />
<br />
COBOLの規格により違いはありますが、代表的な命名規則を下記に示します。</p>
<br />
<p><strong>使用できる文字</strong><br />
　・半角英数字<br />
　・半角ハイフン(-)とアンダーバー(_)<br />
　・日本語、全角文字（JIS-COBOLに限る）<br />
<br />
<strong>データ項目名の長さ</strong><br />
　・最大30文字まで<br />
<br />
<strong>その他の規則</strong><br />
　・予約語（MOVEなど）は使えない<br />
　・半角記号（ハイフン、アンダーバー）で始まる、または半角記号で終わる名前は使えない<br />
　・最低1文字の英字を含めないといけない（半角英数で作成する場合）<br />
　・日本語と半角文字を混ぜてはならない</p>
<br />
<br />
<br />
<div class="subtitle01">特殊なデータ項目「FILLER」</div>
<p>FILLERとは、「無名の項目」を意味し、データ項目名を省略するときに指定されます。</p>
<br />
<dl>
<dt>FILLERの定義方法</dt>
<dd>レベル番号 FILLER    PIC 型.<br />
</dd>
</dl>
<br />
<p>FILLERはデータ項目を拡張する場合に備えて、予備として使われることが多いです。</p>
<br />
<br />
<div class="subtitle01">特殊なレベル</div>
<p>レベル番号はデータ項目の階層や従属関係を定義するための番号のことであり、1～49の範囲で表されますが、その範囲以外に「66」「77」「88」と言った特殊なレベルも存在します。</p>
<table class="list_table"><tr><td>77</td><td>どの集団項目にも属さない単独のデータ項目を定義するときに使用。他のデータ項目とは従属関係を持たない。</td></tr>
<tr><td>88</td><td>条件名条件を定義する場合に使用。</td></tr>
<tr><td>66</td><td>RENAMES（再命名）記述項を示すために使用。</td></tr></table>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/117/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>COBOLのデータ定義</title>
		<link>http://tallercolibri.com/archives/104</link>
		<comments>http://tallercolibri.com/archives/104#respond</comments>
		<pubDate>Wed, 25 Apr 2012 07:21:38 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[データ定義（変数）]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[データ項目]]></category>
		<category><![CDATA[基本項目]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[集団項目]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=104</guid>
		<description><![CDATA[プログラム上で使用するデータを定義するとき、COBOLでは集団項目・基本項目・レベル番号と言われる概念を用います。 データ項目 プログラムは、何らかのデータの「入力」があり、そのデータを使い、とある計算を行い、その結果を &#8230; <a href="http://tallercolibri.com/archives/104">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
プログラム上で使用するデータを定義するとき、COBOLでは集団項目・基本項目・レベル番号と言われる概念を用います。</p>
<br />
<div class="subtitle01">データ項目</div>
<p>プログラムは、何らかのデータの「入力」があり、そのデータを使い、とある計算を行い、その結果を「出力」する、というのが基本的な流れとなります。</p>
<br />
<p>その流れの中で、入力されたデータや計算過程のデータなどを保存しておく「場所」が必要です。<br />
ですので、プログラミングを行う際、命令文を記述していく前に、まずその「場所」を定義してあげる必要があります。</p>
<br />
<p>COBOLではその「場所」に名前を付けたものをデータ項目と呼びます。<br />
（つまりデータ項目とは、C言語など他の言語でいう変数のことです。）</p>
<br />
<br />
<div class="subtitle01">集団項目と基本項目</div>
<p>データ項目は基本項目と、1つ以上の基本項目が複合した構造を持つ集団項目とに分類されます。</p>
<br />
<img src="http://tallercolibri.com/wp-content/uploads/2012/04/31.png" alt="集団項目と基本項目" title="集団項目と基本項目" width="536" height="244" class="alignnone size-full wp-image-105" srcset="http://tallercolibri.com/wp-content/uploads/2012/04/31.png 536w, http://tallercolibri.com/wp-content/uploads/2012/04/31-300x136.png 300w" sizes="(max-width: 536px) 100vw, 536px" />
<br />
<br />
<p>例えば、「日付」というデータ項目について考えてみます。<br />
日付は「年」「月」「日」に分類できます。<br />
この場合、「日付」が集団項目となり、「年」「月」「日」がデータ項目となります。</p>
<br />
<br />
<div class="subtitle01">レベル番号</div>
<p>レベル番号とはデータ項目の階層や従属関係を定義するための番号のことです。<br />
1から49までの範囲で表され、1が最上位の階層となり、数字が増えるほど下位の階層となります。</p>
<br />
<p>下記に集団項目の定義例を示します。</p>
<pre>01  従業員.
&nbsp;&nbsp;&nbsp;&nbsp;03  従業員コード  PIC 9(6).
&nbsp;&nbsp;&nbsp;&nbsp;03  従業員名  PIC  X(30).
&nbsp;&nbsp;&nbsp;&nbsp;03  入社日付.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;05  年  PIC 9999.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;05  月  PIC 99.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;05  日  PIC 99.</pre>
<br />
<p>レベル番号は連番とするのではなく、ある程度、番号をあけて繰り上げていくのが通例となっています。<br />
例えば1の次は3、3の次は5と定義していきます。<br />
これは、後に階層構造が変わり、新たな集団項目を間に組み込みたいときなどのための対策となります。<br />
<br />
また、数字は「01」「03」のように2桁で記述するのが一般的となっています。<br />
（ただし、2桁である必要はなく、「1」「3」と記述してもまったく問題ありません。）<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/104/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PERFORM TIMESによる繰り返し</title>
		<link>http://tallercolibri.com/archives/101</link>
		<comments>http://tallercolibri.com/archives/101#respond</comments>
		<pubDate>Sat, 21 Apr 2012 00:00:13 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[制御文]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[PERFORM]]></category>
		<category><![CDATA[TIMES]]></category>
		<category><![CDATA[繰り返し]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=101</guid>
		<description><![CDATA[繰り返す回数があらかじめ明確になっている場合は、PERFORM TIMESが便利です。 下記は、繰り返しを10回行う処理のサンプルソースです。 000010 IDENTIFICATION DIVISION. 000020 &#8230; <a href="http://tallercolibri.com/archives/101">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
繰り返す回数があらかじめ明確になっている場合は、PERFORM TIMESが便利です。</p>
<br />
<p>下記は、繰り返しを10回行う処理のサンプルソースです。</p>
<br />
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-11.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 WRK-COUNTER                   PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     MOVE  1                      TO  WRK-COUNTER.
000130     PERFORM  10 TIMES
000140         DISPLAY  "WRK-COUNTERは " WRK-COUNTER   UPON  CONSOLE
000150          ADD  1                   TO  WRK-COUNTER
000160     END-PERFORM.
000170     STOP RUN.</pre>
<br />
<dl>
<dt>PERFORM TIMES 書式</dt>
<dd>PERFORM 回数 TIMES<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令文1<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令文2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
END-PERFORM.<br />
<br />
※回数は数値定数か数値形式のデータ項目で指定する。<br />
※EXIT PERFORM文を実行すると、そのタイミングで繰り返し処理から抜ける。<br />
※PERFORMからEND-PERFORMまでの間に記述する命令文にはピリオド不要。<br />
<br />
</dd>
</dl>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/101/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PERFORM VARYING UNTILによる繰り返し</title>
		<link>http://tallercolibri.com/archives/97</link>
		<comments>http://tallercolibri.com/archives/97#respond</comments>
		<pubDate>Wed, 18 Apr 2012 13:26:34 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[制御文]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[PERFORM]]></category>
		<category><![CDATA[VARYING]]></category>
		<category><![CDATA[繰り返し]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=97</guid>
		<description><![CDATA[PERFORM VARYING UNTILで繰り返しを行う場合のサンプルソースです。 VARYINGを使うことで処理を繰り返すごとにカウンタが自動的にカウントアップしていきます。（C言語でのfor文に相当します） 000 &#8230; <a href="http://tallercolibri.com/archives/97">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
PERFORM VARYING UNTILで繰り返しを行う場合のサンプルソースです。<br />
VARYINGを使うことで処理を繰り返すごとにカウンタが自動的にカウントアップしていきます。（C言語でのfor文に相当します）</p>
<br />
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-10.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 WRK-COUNTER                   PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     PERFORM  VARYING  WRK-COUNTER  FROM  1  BY  1
000130                         UNTIL  WRK-COUNTER  >  10
000140         DISPLAY  "WRK-COUNTERは " WRK-COUNTER   UPON  CONSOLE
000150     END-PERFORM.
000160     STOP RUN.</pre>
<br />
<dl>
<dt>PERFORM VARYING UNTIL 書式</dt>
<dd>PERFORM VARYING カウンタ FROM 初期値 BY 増分値<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[WITH TEST 判定のタイミング]  UNTIL  論理式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令文1<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令文2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
END-PERFORM.<br />
<br />
※EXIT PERFORM文を実行すると、そのタイミングで繰り返し処理から抜ける。<br />
※PERFORMからEND-PERFORMまでの間に記述する命令文にはピリオド不要。<br />
<br />
<strong>判定のタイミング</strong><br />
<table class="list_table"><tr><td>BEFORE</td><td>PERFORMを実行する前に論理式の条件を判定する（前判定型）<br />C言語でのwhile文に相当</td></tr>
<tr><td>AFTER</td><td>PERFORMを実行した後に論理式の条件を判定する（後判定型）<br />C言語でのdo-while文に相当</td></tr></table>
※WITH TESTを省略した場合、BEFOREが指定されたものとみなされる。<br />
</dd>
</dl>
<p>
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/97/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PERFORM UNTILによる繰り返し</title>
		<link>http://tallercolibri.com/archives/92</link>
		<comments>http://tallercolibri.com/archives/92#respond</comments>
		<pubDate>Sun, 15 Apr 2012 03:16:51 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[制御文]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[PERFORM]]></category>
		<category><![CDATA[UNTIL]]></category>
		<category><![CDATA[繰り返し]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=92</guid>
		<description><![CDATA[繰り返し処理を行いたい場合は、PERFORM文を使用します。 下記はPERFORM UNTILにより繰り返しを行うサンプルソースです。 000010 IDENTIFICATION DIVISION. 000020 PRO &#8230; <a href="http://tallercolibri.com/archives/92">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
繰り返し処理を行いたい場合は、PERFORM文を使用します。<br />
<br />
下記はPERFORM UNTILにより繰り返しを行うサンプルソースです。</p>
<br />
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-09.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 WRK-COUNTER                   PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     MOVE  1                      TO  WRK-COUNTER.
000130     PERFORM  UNTIL  WRK-COUNTER  >  10
000140         DISPLAY  "WRK-COUNTERは " WRK-COUNTER   UPON  CONSOLE
000150         ADD  1                   TO  WRK-COUNTER
000160     END-PERFORM.
000170     STOP RUN.</pre>
<br />
<p>UNTILに指定した「WRK-COUNTERが10より大きくなるまで」という条件が成立するまで、END-PERFORMまでの範囲に記述した命令文が繰り返し実行されます。</p>
<br />
<dl>
<dt>PERFORM UNTIL 書式</dt>
<dd>PERFORM  [WITH TEST 判定のタイミング]  UNTIL  論理式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令文1<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令文2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
END-PERFORM.<br />
<br />
※EXIT PERFORM文を実行すると、そのタイミングで繰り返し処理から抜ける。<br />
※PERFORMからEND-PERFORMまでの間に記述する命令文にはピリオド不要。<br />
<br />
<strong>判定のタイミング</strong><br />
<table class="list_table"><tr><td>BEFORE</td><td>PERFORMを実行する前に論理式の条件を判定する（前判定型）<br />C言語でのwhile文に相当</td></tr>
<tr><td>AFTER</td><td>PERFORMを実行した後に論理式の条件を判定する（後判定型）<br />C言語でのdo-while文に相当</td></tr></table>
※WITH TESTを省略した場合、BEFOREが指定されたものとみなされる。<br />
</dd>
</dl>
<br />
<p>PERFORM文では、上記サンプルのようにUNTILで指定した条件になるまで繰り返す方法以外に、カウンタを用いた方法もあります。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/92/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EVALUATE文による多岐選択</title>
		<link>http://tallercolibri.com/archives/88</link>
		<comments>http://tallercolibri.com/archives/88#respond</comments>
		<pubDate>Thu, 12 Apr 2012 13:06:37 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[制御文]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[EVALUATE]]></category>
		<category><![CDATA[多岐選択]]></category>
		<category><![CDATA[条件分岐]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=88</guid>
		<description><![CDATA[複数の異なった処理の中から、条件にあった処理を行いたい場合、EVALUATE文を使います。 下記はEVALUATE文を使用したプログラムのサンプルソースです。 000010 IDENTIFICATION DIVISION &#8230; <a href="http://tallercolibri.com/archives/88">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
複数の異なった処理の中から、条件にあった処理を行いたい場合、EVALUATE文を使います。<br />
<br />
下記はEVALUATE文を使用したプログラムのサンプルソースです。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-08.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 WRK-FRUITNUM                  PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     ACCEPT    WRK-FRUITNUM       FROM  CONSOLE.
000130*
000140     EVALUATE  WRK-FRUITNUM
000150         WHEN  100
000160               DISPLAY  "アップル"   UPON  CONSOLE
000170*
000180         WHEN  200
000190               DISPLAY  "オレンジ"   UPON  CONSOLE
000200*
000210         WHEN  300
000220               DISPLAY  "メロン"     UPON  CONSOLE
000230*
000240         WHEN  OTHER
000250               DISPLAY  "その他"     UPON  CONSOLE
000260*
000270     END-EVALUATE.
000280     STOP RUN.</pre>
<br />
<dl>
<dt>EVALUATE文 書式１</dt>
<dd>EVALUATE 評価対象<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN  値<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令文<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN  値1 THRU 値2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令文<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN  値<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN  値<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令文<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN  OTHER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令文<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
END-EVALUATE.<br />
<br />
<strong>WHENの書式</strong><br />
<table class="list_table"><tr><td>WHEN 値</td><td>単一で評価する。複数の値を「または」で評価するときは、WHENを連続して記述する。</td></tr>
<tr><td>WHEN 値1 THRU 値2</td><td>値の範囲を評価する。値1から値2の範囲内であれば条件は成立する。</td></tr>
<tr><td>WHEN OTHER</td><td>どのWHENにも該当しなかったとき実行される。</td></tr></table>
</dd>
</dl>
<br />
<br />
<p>評価対象が複数ある場合でもEVALUATE文を使用できます。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-043.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 WRK-FRUITNUM                  PIC 9(3).
000080 77 WRK-KAKOKIND                  PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     ACCEPT    WRK-FRUITNUM       FROM  CONSOLE.
000120     ACCEPT    WRK-KAKOKIND       FROM  CONSOLE.
000130*
000140     EVALUATE  WRK-FRUITNUM  ALSO  WRK-KAKOKIND
000150         WHEN  100  ALSO  100
000160               DISPLAY  "アップルジュース"       UPON  CONSOLE
000170*
000180         WHEN  100  ALSO  200
000190               DISPLAY  "アップルシャーベット"   UPON  CONSOLE
000200*
000210         WHEN  300  ALSO  ANY
000220               DISPLAY  "メロン"     UPON  CONSOLE
000230*
000240         WHEN  OTHER
000250               DISPLAY  "その他"     UPON  CONSOLE
000260*
000270     END-EVALUATE.
000280     STOP RUN.</pre>
<br />
<dl>
<dt>EVALUATE文 書式２</dt>
<dd>EVALUATE 評価対象1 ALSO 評価対象2 [ALSO 評価対象3…]<br />
&nbsp;&nbsp;&nbsp;&nbsp;WHEN  評価1 ALSO 評価2 [ALSO 評価3…]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令文<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<br />
END-EVALUATE.<br />
<br />
※評価内容にANYを指定すると、その部分は評価されない。<br />
</dd>
</dl>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/88/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IF～THEN文による多岐選択</title>
		<link>http://tallercolibri.com/archives/128</link>
		<comments>http://tallercolibri.com/archives/128#respond</comments>
		<pubDate>Tue, 10 Apr 2012 02:47:34 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[制御文]]></category>
		<category><![CDATA[COBOL]]></category>
		<category><![CDATA[IF]]></category>
		<category><![CDATA[多岐選択]]></category>
		<category><![CDATA[条件分岐]]></category>

		<guid isPermaLink="false">http://tallercolibri.com/?p=128</guid>
		<description><![CDATA[COBOLのIF～THEN文は1つの条件で2つの処理分岐を実現するものです。 しかし、下記のように3つ以上の条件で3つ以上の処理分岐を実現したい場合も少なくありません。 「１が入力されたら（条件１）　　　　処理１ 　２が &#8230; <a href="http://tallercolibri.com/archives/128">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>
COBOLのIF～THEN文は1つの条件で2つの処理分岐を実現するものです。<br />
しかし、下記のように3つ以上の条件で3つ以上の処理分岐を実現したい場合も少なくありません。</p>
<br />
<p>「１が入力されたら（条件１）　　　　処理１<br />
　２が入力されたら（条件２）　　　　処理２<br />
　３から５が入力されたら（条件３）　処理３<br />
　それ以外なら（条件４）　　　　　　処理４」</p>
<br />
<p>このような処理に対して、例えばC言語のIF文であれば多岐条件文（ELSE IF文）が用意されていますが、COBOLではそれがありません。<br />
そのため3つ以上の処理分岐を実現させたい場合は、IF～THEN文を入れ子にしてやる必要があります。</p>
<pre>000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-07.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070 WORKING-STORAGE                  SECTION.
000080 77 NUM                           PIC 9(3).
000090*
000100 PROCEDURE DIVISION.
000110 MAIN.
000120     ACCEPT    NUM                FROM  CONSOLE.
000130     IF  NUM  = 1 THEN
000140         DISPLAY  "1が入力された" UPON  CONSOLE
000150     ELSE
000160         IF  NUM = 2 THEN
000170             DISPLAY  "2が入力された" UPON  CONSOLE
000180         ELSE            
000190             IF  NUM >= 3 AND NUM <= 5 THEN
000200                 DISPLAY  "3から5の間が入力された" UPON  CONSOLE
000210*
000220             ELSE
000230                 DISPLAY  "それ以外"               UPON  CONSOLE
000240*                 
000250             END-IF
000260*        
000270         END-IF
000280*
000290     END-IF.
000300     STOP RUN.</pre>
<br />
<p>上記のように記述すれば、一応要件を満たすことができますが、ご覧のとおり入れ子が深くなりソースコードが非常に読みづらくなります。<br />
条件が増えれば、なおさらです。</p>
<p>そのため、読みやすいよう下記のような工夫を行ってコーディングする人もいます。</p>
<pre>000130     IF  NUM  = 1 THEN
000140         DISPLAY  "1が入力された" UPON  CONSOLE
000150*
000160     ELSE IF  NUM = 2 THEN
000170         DISPLAY  "2が入力された" UPON  CONSOLE
000180*        
000190     ELSE IF  NUM >= 3 AND NUM <= 5 THEN
000200         DISPLAY  "3から5の間が入力された" UPON  CONSOLE
000210*        
000220     ELSE
000230         DISPLAY  "それ以外"      UPON  CONSOLE
000240*
000250     END-IF
000260     END-IF
000270     END-IF.</pre>
<br />
<p>上記サンプルは、ELSE以降に新たなIF～THEN文を記述する方法です。<br />
「ELSE IF」という文があるわけではありません。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tallercolibri.com/archives/128/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
