日本語プログラミング言語なでしこの公式掲示板

なでしこ1 質問

トップ 新規 検索

2023-11-11 10:16:00

Re①:配列の特定の行を削除する方法について

hihiro さん

「反復」を使わず、「の間」等を使って「配列行を、配列行+1」としながら配列の最後まで繰り返す。
「該当リスト」の行であれば、配列削除して、配列行は+1しない


#ここから
#***********プログラム***********
対象セル内容は、「04 にしん
99 いぬ
87 さる
25 あまだい」

該当リストは、「01
04
07
20
25


処理行は、1

#処理行が対象セル内容の表行数になるまで繰返
((対象セル内容の表行数)>=処理行)の間
 #対象セル内容[処理行-1]から部品コードを抽出
 部品コードは、対象セル内容[処理行-1]を「^([^ ]*)」で正規表現マッチ

 #部品コードが該当リストに該当するかの確認
 もし (該当リストの0から部品コードを配列検索)<>-1ならば
  #該当リストに部品コードがある(配列削除する)
  対象セル内容の処理行-1を配列削除 #配列行を削除
 
 違えば
  #該当リストに部品コードがない(配列削除しない)
  処理行は、処理行+1 #処理行を次の配列行に設定

対象セル内容を表示

#ここまで


====================
また、逆に「該当リスト」を反復して、「対象セル内容」を検索して配列削除する方法等もあります。

#ここから
#***********プログラム***********
該当リストを反復
 #繰返
 1の間
  #対象セル内容に該当リストがあれば行番号を取得
  対象行は 対象セル内容の0で「{対象} *」を0から表曖昧検索
  
  #対象行の確認
  もし 対象行<>-1ならば
   #対象行なら配列削除
   対象セル内容の対象行を配列削除
  
  違えば
   #対象行でなければ繰返を抜ける
   抜ける

対象セル内容を表示

#ここまで


エクセルの対象セルの中に複数の文字があります。
該当リストのコードに該当する場合その行は削除しようとプログラムを考えておりますが
うまくいかないので、誰かお教えいただけないでしょうか。

対象セルの各行は前半に半角スペースで区切られたコードがあります。
そのため正規表現マッチでコードを抜き取ります。
その後該当リストの配列にそのコードがあるかを検索します。
当初、検索し該当するならば、配列削除でその行を消そうとしていました。
しかし該当する行を削除してしまうと反復の回数と、処理する行が不一致になることから
末尾に削除するフラグzzzzzをつけ
https://w.atwiki.jp/isoroku_be/pages/190.html
上記の●一括配列行削除 関数で対象セルの中で削除フラグがついている行を削除することを考えました。

下記を実行した場合
4行目の"25 あまだい"にも(部品コード25で、該当リストに存在するため)削除フラグがつくことを期待しのですが
削除フラグは付与されません。

どなたか解決方法を教えていただけないでしょうか。
また、配列の中で特定の行を逐次消すいい方法はあるのでしょうか?



***********プログラム***********
対象セル内容=「04 にしん
99 いぬ
87 さる
25 あまだい」

該当リスト=「01
04
07
20
25



対象セル内容を反復
対象セル内容\(回数-1)を「^([^ ]*)」で正規表現マッチ
「部品コードは{それ}」を表示する
該当リストの0からそれを配列検索
「該非判定結果{それ}」を表示する
もし、それ=-1でなければ  #NFEとNFDTではない場合
対象セル内容\「処理行」にzzzzzを追加する
「****************」を表示する


対象セル内容を表示する

***********ここまで***********


(編集パスワード送信)

子記事

親記事 (No.1747)
返信した記事(元) (No.1747)

この内容(No.1752)に返信

この内容(No.1752)をダウンロード

この内容(No.1752)のテキスト表示





www.eznavi.net