胖有型前辈400 精华贴,..... 看了之后发现自己要去从新学C 很有基础,
在想跨平台的编程问题..
--------------------------
适用范围:写RPG时,WRITE一个有很多字段的PF。
使用方法:编译CLP、C、RPGLE,然后CALL 那个CLP,带一个参数,参数就是PF名。
生成结果:YOURLIB/YOURFILE里面,按F5会出来一个YOURPGTXT的MEMBER,请自行在TYPE栏上敲入“RPGLE”(因为我不会)
目的说明:程序使用DSPFFD命令取出PF的所有字段名,然后生成如下面格式的一组代码。
C*字段说明
C MOVEL *BLANKS 字段名
================================================================
注:下面程序代码中,YOURLIB,是指你自己的库,当然,如果愿意的话,建一个YOURLIB也可以;同理,YOURFILE,就是指你自己库里面的SRCFILE,如果高兴的话,也可以在YOURLIB里面建一个YOURFILE
================================================================
1、CLP程序 WRITERPGCL
/* 自动赋值程序,输入文件名,自动生成赋值语句(空) */
/* 生成结果为YOURLIB/YOURFILE.YOURPGTXT */
PGM PARM(&FILENAME)
DCL VAR(&FILENAME) TYPE(*CHAR) LEN(10)
DLTF FILE(YOURLIB/FILEFLD)
MONMSG MSGID(CPF2105)
RMVM FILE(YOURLIB/YOURFILE) MBR(WRTRPGTXT)
MONMSG MSGID(CPF2105 CPF7310)
DSPFFD FILE(&FILENAME) OUTPUT(*OUTFILE) +
OUTFILE(YOURLIB/FILEFLD)
ADDLIBLE LIB(YOURLIB)
MONMSG MSGID(CPF2103)
CALL PGM(WRITERPGLE)
DLTF FILE(YOURLIB/FILEFLD)
ENDPGM
2、RPGLE程序 WRITERPGLE
FFILEFLD IF E DISK
D DIMCHAR1 S 1 DIM(20)
D DIMCHAR2 S 1 DIM(20)
C
C MOVEL 'YOURPGTXT' PGMNAME 9
C MOVEL *BLANKS FLDNAME 10
C MOVEL *BLANKS FLDTYPE 1
C MOVEL *BLANKS FLDTEXT 20
C*
C DOW 1 = 1
C READ QWHDRFFD 54
C IF *IN54='1'
C LEAVE
C ENDIF
C MOVEL WHFLDE FLDNAME
C MOVEL WHFLDT FLDTYPE
C*
C Z-ADD 1 K 2 0
C Z-ADD 1 N 2 0
C MOVEA WHCHD1 DIMCHAR1
C MOVEA WHCHD2 DIMCHAR2
C EVAL K = 1
C X'0F' LOOKUP DIMCHAR1(K) 18
C X'0E' LOOKUP DIMCHAR2(N) 19
C IF *IN18='1' AND *IN19='1'
C EVAL FLDTEXT=%SUBST(WHCHD1:1:(K-1))+
C %SUBST(WHCHD2:(N+1):(20-N))
C ELSE
C EVAL FLDTEXT=%TRIM(WHCHD1)+%TRIM(WHCHD2)
C ENDIF
C*
C CALL 'WRITERPGC'
C PARM PGMNAME
C PARM FLDNAME
C PARM FLDTYPE
C PARM FLDTEXT
C ENDDO
C EVAL *INLR='1'
C RETURN
3、C程序 WRITERPGC
/*输入参数:
1、生成的程序名 pgmname 实际长度为9位;
2、物理文件中的字段名 fldname 实际长度为10位;
3、字段类型 fldtype 实际长度为1位;
4、字段的中文注释 fldtext 实际长度为20位; */
#include
#include
#include
main(int argc,char **argv)
{
char fname??(255??);
char pgmname??(10??);
char fldname??(11??);
char fldtype??(1??);
char fldtext??(20??);
FILE *fp;
memset(pgmname,0,sizeof(pgmname));
strncpy(pgmname,argv??(1??),9);
memset(fldname,0,sizeof(fldname));
strncpy(fldname,argv??(2??),10);
memset(fldtype,0,sizeof(fldtype));
strncpy(fldtype,argv??(3??),1);
memset(fldtext,0,sizeof(fldtext));
strncpy(fldtext,argv??(4??),20);
/*字符串赋值*/
memset(fname,0,sizeof(fname));
sprintf(fname,"YOURLIB/YOURFILE(%s)",pgmname);
if ( ( fp=fopen(fname,"a") ) == NULL ) {
printf("could not create rpgle ");
exit(127);
}
fprintf(fp," C*%s ??/n",fldtext);
fprintf(fp," C ");
if (fldtype??(0??)=='P')
{fprintf(fp," Z-ADD *ZERO %s ??/n",fldname);}
else
{fprintf(fp," MOVEL *BLANKS %s ??/n",fldname);}
fclose(fp);
}
回复于:2006-01-21 08:57:43
楼主很强哦,还会C语言,向您学习
回复于:2006-01-21 10:45:39
好东西,有空试试。。
回复于:2006-01-21 17:58:03
是好东西,可俺还不知道怎么用呢
回复于:2006-01-21 18:25:58
喔?
这里贴出来的是三个程序的源代码,把它们敲到机器上,再编译,然后CALL 那个CLP就可以了。
请问楼上的有什么问题?
回复于:2006-01-22 11:30:59
是个好东西。不过我经常COPY的功能。且如果是有规律的字段,可以在字段的前面加一个字符变成另外一个变量当作是一个中间变量这样多名称可以很直接地看出是相同属性的变量。
阅读(1942) | 评论(0) | 转发(0) |