More ... | 編集履歴:差分2015/09/09 09:49:30 JST以来の改行コードを変換するモジュールの変更箇所
- 改行コードを変換するモジュール - 複数の種類の改行コードが混在していても変換できるはず - CR+LF、CR、LFの改行コードに対応しています - {{{ - #module - - //改行コードを変換する - //使い方 - //kaigyohen p1 ,p2 ,p3 ,p4 ,p5 ,p6 - //p1=変数名 : 変換先の変数 - //p2=変数名 : 変換元の変数 - //p3=0~2(0) : どの改行コードに変換するか変換 ( 0=CR+LF , 1=CR , 2=LF ) - //p4=0~2(0) : 処理方法 ( 0=実際に処理 , 1=使われている改行コードの種類を求める(返し値 0=不明 , 1=CR+LF , 2=CR , 3=LF) , 2=実際の処理はせずに変換後の文字列の長さだけを計算(末尾の0は含まず) - //p5=0~(0) : 変換後の文字列が入るバッファーのサイズ (0の際は自動確保) - //p6=0~(0) : 変換する文字列の長さ (0の際は自動計算) - - #define CR 13//先頭に戻る - #define LF 10//一行下に送る - #deffunc kaigyohenkan var henkanato , var henkanmae , int shurui , int dosuru , int nagasaato , int nagasamae , local j , local tmp , local motoshurui - - if dosuru<0 | dosuru>2 : return 0 - if shurui<0 | shurui>2 : return 0 - - if dosuru==1{ - motoshurui=0 //motoshurui=0 不明 , motoshurui=1 CR+LF , motoshurui=2 CRだけ , motoshurui=3 LFだけ - repeat//元の改行コードの種類を求める - - if nagasamae>0 : if cnt>=nagasamae : break - tmp=peek(henkanmae,cnt) - if tmp==0 : break - if tmp==CR{ - if nagasamae>0 & cnt+1<nagasamae{ - if peek(henkanmae,cnt+1)==LF : motoshurui=1 : break - motoshurui=2 : break - } - if nagasamae<=0 { - if peek(henkanmae,cnt+1)==LF : motoshurui=1 : break - motoshurui=2 : break - } - motoshurui=2 : break - } - if tmp==LF : motoshurui=3 : break - - loop - return motoshurui - } - - j=0 - repeat - - if nagasamae>0 : if cnt>=nagasamae : break - if nagasaato>0 & j>= nagasaato-1 : break - if nagasaato<=0 & dosuru!=2 : memexpand henkanato,j+2 - tmp=peek(henkanmae,cnt) - if tmp==0 : break - - if tmp==CR{ - if (nagasamae>0 & cnt+1<nagasamae) | (nagasamae<=0) { - if peek(henkanmae,cnt+1)==LF{//CR+LFの組み合わせの時 - if shurui==0{ - if nagasaato<=0 & dosuru!=2 : memexpand henkanato,j+3 - if nagasaato>0 & j>= nagasaato-2 : break - if dosuru!=2 : poke henkanato,j,CR : poke henkanato,j+1,LF - j+=2 - } - if shurui==1{ - if nagasaato>0 & j>= nagasaato-1 : break - if dosuru!=2 : poke henkanato,j,CR - j++ - } - if shurui==2{ - if nagasaato>0 & j>= nagasaato-1 : break - if dosuru!=2 : poke henkanato,j,LF - j++ - } - continue cnt+2 - } - } - } - - if tmp==LF | tmp==CR{//CR単体 または LF単体の時 - if shurui==0{ - if nagasaato<=0 & dosuru!=2 : memexpand henkanato,j+3 - if nagasaato>0 & j>= nagasaato-2 : break - if dosuru!=2 : poke henkanato,j,CR : poke henkanato,j+1,LF - j+=2 - } - if shurui==1{ - if nagasaato>0 & j>= nagasaato-1 : break - if dosuru!=2 : poke henkanato,j,CR - j++ - } - if shurui==2{ - if nagasaato>0 & j>= nagasaato-1 : break - if dosuru!=2 : poke henkanato,j,LF - j++ - } - continue - } - - if dosuru!=2 : poke henkanato,j,tmp - j++ - - loop - - if dosuru!=2 : poke henkanato,j,0 - return j - - #global - - moto="ちくわ1234567890a0123456789味噌1233211az- ここから前は入る\nmiso ここから後ろは入らない" - sdim buf - kaigyohenkan buf,moto,,1 - if stat==0:mes "改行コードはわかりません" - if stat==1:mes "改行コードはCR+LF" - if stat==2:mes "改行コードはCRだけ" - if stat==3:mes "改行コードはLFだけ" - kaigyohenkan buf,moto,2,2,64,67 - mes "67バイト分を改行コードをCR+LFからLFに変換した後の\n文字列の長さの計算(末尾の0は含みません) "+stat+"バイト" - mes "strlen(moto)="+strlen(moto)+"\n\n元の文字列\n"+moto+"\n\n67バイト分を改行コードをCR+LFからLFに変換" - kaigyohenkan buf,moto,2,,64,67 - mes "返し値="+stat+" strlen(buf)="+strlen(buf)+"\n\nLFへの変換結果\n"+buf+"\n" - - moto=buf - sdim buf - kaigyohenkan buf,moto,,1 - if stat==0:mes "改行コードはわかりません" - if stat==1:mes "改行コードはCR+LF" - if stat==2:mes "改行コードはCRだけ" - if stat==3:mes "改行コードはLFだけ" - kaigyohenkan buf,moto,1,2,64 - mes "最後までを改行コードをLFからCRに変換した後の\n文字列の長さの計算(末尾の0は含みません) "+stat+"バイト" - mes "最後までを改行コードをLFからCRに変換" - kaigyohenkan buf,moto,1,,64,//変換前の長さ(第6引き数)を省略すれば自動計算 - mes "返し値="+stat+" strlen(buf)="+strlen(buf)+"\n\nCRへの変換結果\n"+buf+"\n" - - button "次へ",*tsugi - stop - - *tsugi - - cls - - moto=buf - sdim buf - kaigyohenkan buf,moto,,1 - if stat==0:mes "改行コードはわかりません" - if stat==1:mes "改行コードはCR+LF" - if stat==2:mes "改行コードはCRだけ" - if stat==3:mes "改行コードはLFだけ" - kaigyohenkan buf,moto,,2 - mes "改行コードをCRからCR+LFに変換した後の\n文字列の長さの計算(末尾の0は含みません) "+stat+"バイト" - mes "変換後の変数のメモリを自動確保させて改行コードをCRからCR+LFに変換" - kaigyohenkan buf,moto,,,,//変換後の結果が入る変数のサイズ(第5引き数)を省略すれば自動確保 ここで第5引き数に65以上の数を指定するとバッファーオーバーフロー - mes "返し値="+stat+" strlen(buf)="+strlen(buf)+"\n\nCR+LFへの変換結果\n"+buf - }}} - https://aa38020e42f53ca54e166915354734af1f102cbd.googledrive.com/host/0B9vewWZYDiXefmNjRWZCb1FrUmpab3o2dk5nTXRkRFdGTXFqTWZjNExVTm41OHUwWFdRUG8/apps/kaigyohn.txt |