| まえださんこんにちは、例示が中途半端だからレスが付きにくいのです。 スキャンデータとエクセルでの加工データが混在しているようですが IDや処理番号は桐で付加すべきデータでスキャンデータには 商品名と組成と備考だけじゃないのですか? 一応最初の投稿に合わせて一括を組みましたが、読み込み順に処理番号 を振ることは簡単であり、IDも順番が決まっていれば次の「形状」が 出現した時点で次の番号に変更が可能なので、そういう意味で実データ を要求しているわけではないのです。 用は規則性の問題です。 1)項目名にはスペースを含まない >商品名 組成 備考
2)商品名や備考などのデータにはスペースを途中に含まない >ペニシリン 形状 あああああ >赤チン いい >便座 うううう >投薬 内容 きき >バッファ琳 いい
という2つの規則がはっきりしている内容であればPDFを範囲指定して 名前を付けて保存すれば桐でファイル読み込みと同時に処理番号やIDを 付加して作業表を作成しNo4529 の一括処理を参考に最終目的まで一度 に処理可能です。
掲示板の例示部分をコピーして"mae.txt"で保存します。
var Str { &SSTR , &Smoto = "mae.txt" , &Steigi = "定義.k3" \ , &Sdata = "data.k3" , &S直前値 , &Stemptbl = "作業.tbl"}\ ,Int{&Iitem=0} var str { &SC = "," , &SQCQ = """" + "," + """" \ , &SCQ = "," + """" , &SQC = """" + "," , &SQ = """" } ファイル削除 &Steigi ファイル削除 &Sdata /*┏*/ 印字開始 &Steigi,終了状態=&実行リターン /*┃*/ 印字 "###" /*┃*/ 印字 "### WIN桐 00" /*┃*/ 印字 "###" /*┗*/ 印字終了 /*┏*/ファイル入力開始 &Smoto,終了状態=&実行リターン /*┃┏*/while (&実行リターン=1) /*┃┃*/ ファイル入力 &STR,行,終了状態=&実行リターン /*┃┃*/ &STR=#trim(#S(&STR," "," "),3) /*┃┃*/ &SSTR=#SSTR(&STR,1,#文字位置(&STR," ")-1) /*┃┃┏*/while (&SSTR<>"") /*┃┃┃┏*/if (&SSTR="ID") /* 項目名の最初の出現名 */ /*┃┃┃┃*/ call 分割項目名(&STR,&SSTR,&Steigi,&Iitem) /*┃┃┃┣*/else /* 項目名行でない場合(データ行の場合) */ /*┃┃┃┃*/ call 分割データ(&STR,&SSTR,&S直前値,&Sdata) /*┃┃┃┗*/end /*┃┃┗*/end /*┃┗*/end /*┗*/ファイル入力終了 表作成 &Stemptbl, 定義ファイル=&Steigi\ , データファイル=&Sdata,モード=専有\ , 終了状態 = &実行リターン 表形式編集
proc 分割項目名(Str &S元文字,参照 Str &S分割\ ,Str &Sfile名,refer Int &I項目数) var str{&Stemp} 印字開始 &Sfile名,追加,終了状態=&実行リターン while (&S元文字<>"") &Stemp=&SQ+&S分割+&SQ 印字 &Stemp,&SCQ,"文字列",&SQCQ,"M1482",&SQ &S元文字 = #trim(#sstr(&S元文字,#L(&S分割)+1),3) &S分割 = #cond(#文字位置(&S元文字," ")>0\ ,#SSTR(&S元文字,1,#文字位置(&S元文字," ")-1),1,&S元文字) &I項目数 = &I項目数 + 1 end 印字終了 end proc 分割データ(Str &S元文字,参照 Str &S分割\ ,refer Str &S直前値,Str &Sfile名) var str{&Stemp},Int{&Icount=0} while (&S元文字<>"") &Icount = &Icount + 1 if (#IS数字(&S分割,1)=1) if (&Icount = 1) &Stemp = &Stemp + &SCQ + &S分割 + &SQCQ + &SQ else &Stemp=&Stemp+&SC+&S分割 end else if (#文字位置(&STR,"形状")+#文字位置(&STR,"内容")\ +#文字位置(&STR,"適用")>0) &Stemp=&Stemp+&SCQ+&S分割+&SQ else if (&Icount = 1) &Stemp = &Stemp + &SCQ + &S分割 + &SQCQ + &SQC else if (&Icount <>3) &Stemp=&Stemp+&SCQ+&S分割+&SQ else &Stemp=&Stemp+&SCQ+&S直前値+&SQCQ+&S分割+&SQ end end end &S元文字 = #trim(#sstr(&S元文字,#L(&S分割)+1),3) &S分割 = #cond(#文字位置(&S元文字," ")>0\ ,#SSTR(&S元文字,1,#文字位置(&S元文字," ")-1),1,&S元文字) &S直前値=#COND(#対応番号("形状,内容,適用",&S分割)>0,&S分割\ ,1,&S直前値) end 印字開始 &Sfile名,追加,終了状態=&実行リターン 印字 #sstr(&Stemp,2) 印字終了 end
|