• ベストアンサー

RPGの配列について

0040.00 E NMK 20 1 0200.00 C MOVELP1NMK NMK 0201.00 C* 0202.00 C 1 DO 20 Y 20 0203.00 C NMK,Y IFEQ *BLANK 0204.00 C MOVEL*HIVAL NMK,Y 0205.00 C ENDIF 0206.00 C ENDDO 0207.00 C* 0208.00 C SETOF 92 0209.00 C P1NMK SETLLEDTML01 0210.00 C* 0211.00 C *IN92 DOWEQ*OFF 0212.00 C READ EDTML01 92 0213.00 C TMNMK IFGT NMK 0214.00 C SETON 92 ・・・・・ こんな感じでやっているんですが213行目のところでコンパイル落ちちゃいます・・・ エラーでは 指定された演算命令に対して演算項目2の配列名が正しくない とでます ちなみにTMNMKはカナ名称属性Aで20桁です。 演算項目2に配列名を入れることは無理なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • taranko
  • ベストアンサー率21% (516/2403)
回答No.2

>0213.00 C TMNMK IFGT NMK ここで20桁のものと、1桁を比べれるか自体やったことが無いので わからないのですが、演算項目2に配列名を入れることは可能です。 E AR6 3 5 1 C 1 DO 3 A C WSJYUR IFLE AR6,A C 処理 C ENDDO このように配列の数だけループさせて調べる方法があります。 hisajiroさんの場合は配列の何番目を使って調べたら良いのか 指定されていなかったのでコンパイルエラーになったのでは 無いでしょうか(,A)の部分です。 いかがでしょうか。

hisajiro
質問者

お礼

0040.00 E NMK 20 1 0052.00 I DS 0053.00 I 1 20 NMK 0054.00 I 1 20 P1NMK 0055.00 I 1 20 WNMK これでやってみたらうまくいきました。 ありがとうございます^^

その他の回答 (1)

  • miria
  • ベストアンサー率33% (17/51)
回答No.1

目的が良く分からないプログラムですが この場合の演算横目2は NWK,x の形をとるか 事前にMOVEA コマンドで配列全体を変数に移送しておくと良いのではないでしょうか。 TMNNKと比較する配列のブランクを事前に*HIVILに置き換える意味も良く分かりません。 AS/400にはINFOSEEKERが導入されていれば マニュアルと同等の内容が検索できますのでご確認下さい。 蛇足ですがこのサイトでAS/400 RPGの回答が得られるのは機会が少ないと思いますので AS/400関連のFAQサイト等を検索されてはいかがでしょうか。

hisajiro
質問者

お礼

ありがとうございます。 このプログラム自体は名称の類似検索の為に組んでいるものです。 このサイトでもAS/400関連の回答は結構あるので役にたっています^^ また何かあったらお願いします

関連するQ&A

  • RPG 配列宣言について

    いつもお世話になっております。 IBM AS/400の駆け出しプログラマーです。 今、配列を使ったシステムを組んでいるのですが、 たとえばAというDBの項目に同じものがいくつかあるとします。 課所コード1(KSCD1)、課所コード2(KSCD2)、・・・・ といったような項目です。 そのAのファイルを読み、課所コードを配列に入れたいのですが、 配列KSCというものに KSC,1にはKSCD1 KSC,2にはKSCD2といった感じです。 演算仕様書でMOVEL  KSCD1  KSC,1 と個々にやっていく方法以外にレコードを読んだときに自動的に配列に入れるような方法があったら教えていただきたいと思います。 何せ個々に入れていくとそれだけで80行使ってしまうので・・・・ 知っている方がいらっしゃいましたらどうかお助けください。 お願い致します。

  • C言語で巨大配列を作るにはどうすれば良いのでしょうか?

    C言語で巨大配列を作るにはどうすれば良いのでしょうか? テストで作ってみた配列を用いたプログラムが動かなかったので(コンパイルは正常)、なんでだろうと思って調べてみると、巨大な配列はcalloc関数等を用いて作る必要があると知りました。 しかし正直解説サイトを見てもよく意味が分かりませんでした…。 例えばA[1000][1000][1000]の様な配列は、どの様に作ればいいのでしょうか? A[x][y][z]みたいに表現して、Aを変えて同じ様な配列を8個ほど作りたいです。 初心者なので勉強不足かも知れませんが、どうぞ宜しくお願い致します。

  • fortran 途中まで考えたのですが。。。。

    エラトステネスのふるい(素数の倍数を除いていって残ったのが素数)で3桁の素数を求めて表示したいです。 私が考えたのは、 1・2~99までの数を素数かどうか調べて、素数を配列に入れていく 2・100~999まで素数の配列の中の数で割って、割り切れたらおしまい。割り切れなかったら表示していく ということです。 しかし下のプログラムではうまく素数配列ができていないようなのです。 ここまでかなり時間がかかったのでこのプログラムに手をいれて これ以外におかしくなるところもどこを直せばいいのか教えてくださるとうれしいです。 C C q223.f C PROGRAM q223 C IMPLICIT NONE C INTEGER N,i,K,s,l REAL a(99),b(99),c(99),X,Y C real M C a(1)=2 a(2)=3 l=2 C DO N=2,99,1 M=N**(0.5) S=M DO i=2,S,1 K=MOD(N,i) IF(K ==0)THEN exit ELSE IF(K /=0)THEN l=l+1 a(l)=N ENDIF ENDDO ENDDO C do N=100,999 do l=1,99 X=a(l) Y=N/X if(Y==0)then exit else if(Y/=0)then write(*,*)N end if end do end do c end よろしくおねがいします

  • 「配列名はポインタ」という表現は間違っているのでは?

    よくネット上で、「配列名はポインタ」というような表現が出てきますが、 「配列名はポインタになっているのである。 http://www.wakhok.ac.jp/~kanayama/C/99/node111.html」 このような表現は、間違っているのではないでしょうか? C言語を作った本人によるK&Rのp.121には、次のように書かれています。 配列名とポインタの間には、心に留めておかなければならない違いが一つある。 ポインタは変数であり、したがってpa=aやpa++は意味のある演算である。   ←(1) しかし配列名は変数ではない。したがって、a=paやa++のような構文は正しくない。 ←(2) (1)より、 ポインタは、変数である ので、この対偶をとると、 変数でないものは、ポインタではない  ←(3) となります。 (2)より、 配列名は、変数ではない  ←(4) となるので、 (3)と(4)から、 配列名は、ポインタではない ←(5) となります。 そうすると、「配列名はポインタ」というような表現は間違っていることになり、誤解の元になるので、改めるべきではないかと思うのですが。

  • 配列のファイル出力について

    fortranでできるファイルへの配列の出力をC言語でどのようにプログラムするか教えて頂きたいと思います。 2次元配列a(i,j)の出力はfortranでは以下のようなプログラムになります。 open(10,.省略...) ファイルを指定して開く do j=1,ny                ループj   write(10,'(100f10.3)') (a(i,j),i=1,nx) ループi+書き出し enddo                  ループjの最後尾  close(10)                ファイルを閉じる 100f10.3というのは小数点3桁の実数で10カラムで表現したものが100個並ぶという意味です。これと同じことをやるC言語プログラムを教えて頂きたいのですが。私の手元にある本にはやり方が載っていません。 C言語にはfortranのような数字のカラムを指定するようなフォーマットの調整などできるのでしょうか。よろしくお願いします。

  • 配列のとれる領域

    #include<stdio.h> #define X_wid 512 #define Y_wid 512 main(int argc,char *argv[]) { int x=0,y=0,X=0,Y=0,c; int input[X_wid+1][Y_wid+1],middle[X_wid][Y_wid]; FILE *fp,*fp_w;  :  : } middle[X_wid][Y_wid]配列のとる領域の値を大きくとるとエラーメッセージがでてしまいます。 [1][1]や[X_wid][Y_wid]などは正常にコンパイルできるのですが、[X_wid*2][Y_wid*2]みたいに領域を多くするとエラーメッセージがでてしまいます。 やはり、配列のとれる領域は制限があるのでしょうか? また、それでもその領域([X_wid*2][Y_wid*2)を使わなければならない時はどうすればよいでしょうか?

  • 配列upでエラー発生,なぜ?

    初めて質問いたします.私はこれまでFortranは触っていましたが,Cは始めて数ヶ月の初心者です.慣れない点ご容赦ください. (x,y)平面上でp[x][y]があり,p[x][y]は整数を持っています.今現在の数値はx,yは共に100分割しており,p[x][y]自身は1~10のいずれか一つの整数です.これをpの数値も配列にしたいので,ph[k][x][y]に変えようとしています.定義は「#define ND 100」および「#define maxg 24」とした上で,「int p[ND][ND]」と「double ph[maxg][ND][ND]」としています.maxgが24の場合,コンパイルも計算もうまくいきます.しかし,maxgを25に変えるとコンパイルはうまくいくのですが,計算ができず,「問題が発生したため、<プログラム名.exe> を終了します。 ご不便をおかけして申し訳ありません。/エラー報告を送信するorしない」の画面が出てきます.配列を変えただけでエラーがでる理由が分かりません.タスクマネージャーで見る限り,計算中のメモリーにも余裕があるようです.どこに原因があるのか,何を調べるべきか教えてもらえませんか? ちなみにコンパイラーはvisualC++.Net standard 2002を使用しています.ソフト上でメモリーの制限をするような設定か何かがあるのでしょうか?よろしくお願いします.

  • C言語の配列の入れ方について質問です。

    以下のプログラムは配列opに"+-*/"の四則演算子を入れています。 配列に入れた四つの文字を三つ取り出して組み合わせを全て表示させたいのです。 修正箇所を教えていただけますか? 組み合わせは重なっても可とする。 例: +++ OK **+ OK +** OK #include <stdio.h> int main() { inti,j, k,l;/*i=1桁目 j=2桁目 k=3桁目 l=4桁目*/ charop[4] = "+-*/"; for(op[i]=0; op[i]<4; op[i]++){ for(op[j]=0; op[j]<4; op[j]++) { for(op[k]=0; op[k]<4; op[k]++) { for(op[l]=0; op[l]<4; op[l]++){ printf("%c%c%c%c\n", op[i], op[j], op[k], op[l]); } } } } return 0; }

  • 配列のファイルへの出力について

    fortranでできるファイルへの配列の出力をJAVAでどのようにプログラムするか教えて頂きたいと思います。 2次元配列a(i,j)の出力はfortranでは以下のようなプログラムになります。 open(10,.省略...) ファイルを指定して開く do j=1,ny                ループj   write(10,'(100f10.3)') (a(i,j),i=1,nx) ループi+書き出し enddo                  ループjの最後尾  close(10)                ファイルを閉じる 100f10.3というのは小数点3桁の実数で10カラムで表現したものが100個並ぶという意味です。これと同じことをやるJAVAプログラムを教えて頂きたいのですが。私の手元にある本にはやり方が載っていません。 JAVAにはfortranのような数字のカラムを指定するようなフォーマットの調整などできるのでしょうか。よろしくお願いします。 この質問は、C言語について以前質問したものですQNo.3590702。 JAVAだったらどうなるだろうと思ってお尋ねしています。

    • ベストアンサー
    • Java
  • C++言語の配列の呼び方,動的・可変長の違い

    C++言語での配列の名称についての質問です. int Array[10]; みたいに宣言する普通の配列は「静的配列」と呼びますよね.コンパイル時に定数で要素数を指定しておかなければならないからですよね. これに対して,new[]演算子を用いて int *Array = new int[n]; といったように確保する配列はなんと呼ばれるのでしょうか. 実行後に変数を用いてその要素数を動的に指定できるので,「動的配列」と呼ぶ人が周りには多いです(「ポインタ配列」とも).しかし,C言語でのrealloc関数みたいに,直接に配列長を変化させるといったようなことはできませんよね. (改めてnew[]してmemcpy()すれば出来るのでしょうが) そこで,配列長をプログラム中で自在に変化させる方法としてstd::vectorを利用する方法がありますよね.このvectorを「動的配列」と呼ぶ人もいました. 私は,new[]したものは動的に要素数を指定できるがその後の配列長は固定であり,vectorはいつでも配列長が可変なので int Array[10]; ・・・静的固定長配列(静的配列) int n = 10; int *Array = new[n]; ・・・動的固定長配列 std::vector<int> v; ・・・可変長配列 と呼んでいるのですが,一般的にはそれぞれどのように呼ばれるのでしょうか. また,最近はstd::arrayをいうものを知りました.これについてもどのように呼ばれるのか,教えてください. よろしくお願いいたします.