ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:【perl】特定の条件を元に文字を削除) 【perl】特定の条件を元に文字を削除 2014/07/04 11:49 このQ&Aのポイント perlを使用してCSVファイル内の特定の条件に基づいて文字を削除する方法について困っています。具体的には、3番目のフィールドを基準に2番目のフィールドの文字を削除したいです。例えば、4の場合は2番目のフィールドの末尾から4つの0を削除し、2の場合は2つの0を削除したいです。 【perl】特定の条件を元に文字を削除 perlにてCSVファイルの中で特定の条件の時に 文字を削除する分を書きたいのですがうまくいかず困っております。 1111,11110000,4 2222,11110000,4 3333,11111100,2 4444,11000000,6 このようなデータで 3番目のフィールドを元に2番目のフィールドの文字を削除したいと思っております。 4の場合はお尻から4つの0を削除 → 1111,1111,4 2の場合はお尻から2つの0を削除 → 2222,111111,2 上記のデータですと最終的には以下のような形にしたいと思っております。 1111,1111,4 2222,1111,4 3333,111111,2 4444,11,6 お手数おかけしますがお力添えただけたら幸いです。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (3) 専門家の回答 質問者が選んだベストアンサー ベストアンサー ybnormal ベストアンサー率50% (220/437) 2014/07/04 16:02 回答No.2 べたでやるなら、こんな感じでしょうか。 while(<>){ chop; @x = split(/,/,$_); $len = length($x[1]) - $x[2]; $x[1] = substr($x[1], 0, $len); } あとはこんなやりかたも。 while(<>){ chop; @x = split(/,/,$_); for(1..$x[2]){ chop($x[1]); } } 質問者 お礼 2014/07/07 11:40 ご回答いただきありがとうございました。 ご教授いただいた内容で無事解決いたしました。 また何かありましたら宜しくお願い致します。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (2) ybnormal ベストアンサー率50% (220/437) 2014/07/04 16:08 回答No.3 見てわかると思いますが、私のスクリプトは3カラム目に指定された数だけ無条件に削除します。0以外は削除したくないというのであれば、やり方は変わってきます。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 Tacosan ベストアンサー率23% (3656/15482) 2014/07/04 12:19 回答No.1 まず, どこで困っているのでしょうか? 「どこまでできているのか」「何に困っているのか」を明確にしてください. あと, 仕様が不明確です. 例えば ・3番目のフィールドが 3 のときに 2番目のフィールドのお尻から 7個が 0 とか ・3番目のフィールドが 6 のときに 2番目のフィールドのお尻から 3個が 0 (当然その前には 0 でないものがある) とかのときにはどうすればいいのですか? 質問者 お礼 2014/07/07 11:38 ご回答いただきありがとうございました。 また、説明不足で大変申し訳ございませんでした。 2番の方の回答でなんとか解決致しました。 また何かありましたら宜しくお願い致します。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Perl 関連するQ&A 特定の文字を削除したい <元データ> 1955/03/08,東京太郎BD,東京 営業 1978/12/28,山田花子S,横浜 管理 1970/07/07,佐藤次郎KK,東京 管理 といったCSVデータから特定の文字(名前後のローマ字/1or2桁)をPerlを使用して削除する方法を教えて下さい。 <実行後> 1955/03/08,東京太郎,東京 営業 1978/12/28,山田花子,横浜 管理 1970/07/07,佐藤次郎,東京 管理 宜しくお願いします。 perlでの特定文字列のカウント ご教示お願いいたします。 perlについての質問です。 csvファイル内で、特定のカラムの中の、特定の文字列が何回出現するかマッチする回数をカウントしたいと考えています。 csvの中身は以下のような内容です。 yamada,20220522,jobA tanaka,20220521,jobB takahashi,20220521,jobB このcsvの最後のカラムに検索をかけ、「jobB」がいくつ出没するのかカウントしたいです。 この場合のスクリプトをどのように記述したらよいでしょうか? ワンライナーではなく、スクリプトファイルとしたいです。 以上、よろしくお願いします。 perlで特定のデータを書き出す方法 perlは何個かプログラムを作ったことがあるのですが、 本当に単純なものしか作ったことがない初心者です。 CSVを読み込んで、そのCSVを元に、あるURLにアクセスし、 そこで取得した特定のデータを書き出すということを行いたいのですが、 どのようにしたら実現できるのでしょうか。 お手数ですがご教授ください。 ---------------- 【持っているCSVデータ】 A | B | C | 1 | テキスト|テキストxxx| 2 | テキスト|テキストyyy| 3 | テキスト|テキストzzz| 【1行づつ以下のようなURLにアクセス】 http://www.abcd/テキストxxx 【表示されると以下のようなXMLが返ってくる】 <result> <version>1</version> <text>タイトル</text> <coordinate> <main_id>14231245234</main_id> <div>テキストテキストテキスト</div> </coordinate> <needs_to_verify>yes</needs_to_verify> </result> ↑ 1行づつCSVを読み込んで、 ここのmain_idを一行づつテキストデータに書き出したい。 ---------------- perl でファイルを読み込んだり書き出したりすることは出来るのですが、 URLにアクセスして、 特定のタグに含まれるもののみを書き出すというやり方がわかりません。。 お手数ですがどうぞよろしくお願いいたします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム 特定の文字列を削除 こんにちは perlで特定の文字列からその後ろをすべて 削除したいのですが、うまくできなくて質問します。 Ex)123.12abc ⇒123.12 012.123abc ⇒012.123 123.1234|| ⇒123.1234 上記のようなデータの少数点までの数字の後ろにabc、||、半角、全角スペースなど文字列があります. 少数点までの数字の後ろの文字列すべてを削除したいですが、 特定の文字列からその後ろにある文字列全てを指定する方法(正規表現)はありませんでしょうか? どうかご存知の方、教えてください!! よろしくお願いいたします。 Perlの文字列削除とcsv出力の方法について 現在、Perlを用いてtxtファイルから必要なデータだけを取り出し、それをcsv ファイルに出力したいと考えております。 Perlはほとんど触ったことがなく、色々と勉強しながら行っているのですが、期 日が迫っているという事情もあり質問させていただきます。 txtファイルには以下のような文が1000行ほどあります。 *○ △ /△/△/△/△/○.txt, ○|○): ○ ○,△:任意の数字、または文字列です。 この内、"○"のものだけを一つ一つ分けてcsvに出力したいのです。 つまり○は4つありますが、出力する際は1つ目の"○"を1行目に、2つ目の"○"を2行 目にといった形にしたいです。 そして、それが1000列分あるということになります。 上手く△のものだけを除外し、○だけを抽出する方法はあるでしょうか? どなたかよい方法をご存知のかたいらっしゃいましたら、教えていただけると幸 いです。 エクセルで行うということも考えましたが、htmlファイルが入力ファイルとなる可能性もあるためPerlで行うことにしました。 特定文字列を含まない行を削除 以前特定文字列を含む行を削除する方法の質問をし、正規表現を置換することでできることを知りました。^.*特定の文字列.*\n 今度は特定文字列を含まない行を削除を削除したいです。 この場合どう記述すればいいでしょうか? また、特定文字列1と特定文字列2のどちらかを含まない行を削除する方法もあわせて知りたいです。 特定の文字を削除 すいません、困っています。 htmlで表示させるのに、JAVAscriptを使用して以下のことを実現したいのですが、 例えば、数字で90とか92とか88はそのまま表示、もし080とか0400みたいに最初の桁に0が表示された場合、自動的に0のみ削除したいのですが、どうすれば実現できますでしょうか? 先頭の特定の文字(今回の場合は0ですが)を削除するscript を教えて下さい! 宜しくお願いします! 特定の文字などを一括削除したい タイトルの通りなのですが、特定の文字などを一気に削除してしまう方法はあるでしょうか? 具体的には、例えばメモ帳などに (1)タイトル ここに文章 (2)タイトル ここに文章 (3)タイトル ここに文章 というような感じの構成の文章があるとします。この中で、(1)、(2)などと表示されている行を全て一括で削除したいのです。A,Bでも箇条書き風に○など何でもいいのですが、特定文字列が含まれている行を全て一括で削除したいのです。上記の場合だとタイトルと書かれてある行を全て削除したいのです。手動で削除するのもいいですが、相当数ある場合かなり大変です。特定文字が含まれている行を一括で削除するなどのフリーソフトはないでしょうか?。また、何か方法があるでしょうか?。回答宜しくお願いします。 特定の文字を含むものだけ削除 VBAを調べて勉強中です。 先日から何度ためしても動いてくれないVBAがあります。 教えてください。 ある、特定の文字を仮に「山」とします。 もう1つの特定文字は「川」とします。 もし、山、川両方があれば削除はしたくないです。 そして、もし、「山」だけがあればその行は削除です。 山を含む行が2行続いたりすると、上の方は削除対象に なるけども、下の行は削除されないままということがあります。 その場合、どのようなVBAで対処しようか考えたとき、 lRow = Cells(Rows.Count, 1).End(xlUp).Rowというのが ある、とネットで知りました。 しかし、変数を設定しないといけなかったりもし(すでに、 行をあらわすものとして変数iを使用しています)、うまく 作成できず、どの行も全く削除されない状況となりました。 アドバイスを頂けると助かります。 エクセルで特定の文字が含まれる行から特定の文字が含まれる行の削除方法 エクセルで特定の文字が含まれる行から特定の文字が含まれる行の削除方法 表題のとおりですが、エクセルで特定の文字が含まれる行から特定の文字が含まれる行の削除方法について教えてください。 特定の文字(C列にあります)が含まれている行から5行下の先ほどとは違う文字(これもC列にあります)までを削除したいのです。 それがたくさんあり大変困っております。 エクセルを起動してマクロの記録を行い手作業で5回削除し記録終了としたのですが、 5回以上削除したい場合は操作が行われませんでした。 これをマクロで行うにはどういう式を作ればいいでしょうか? 宜しくお願いします。 文字列から、特定の文字を削除したい アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか? 例えば電話番号の入力の場合、 03-xxxx-xxxx →03xxxxxxxx 077-xxx-xxxx →077xxxxxxx のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。 入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。 よろしくお願いします。 awkで検索し、特定のフィールドを抽出する方法 UNIX初心者です。 以下のようなデータファイル(AA.dat)から、条件を満たすデータの特定フィールドを別のファイル(BB.dat)に出力したいのです。 どのようにしたら良いのでしょうか? AA.dat(CSV形式) aaa,22,33,44,55,66,77,88,1,1,0,0,1001 bbb,22,33,44,55,66,77,88,1,1,0,0,1002 ccc,22,33,44,55,66,77,88,1,0,0,0,1001 ddd,22,33,44,55,66,77,88,1,1,0,0,1002 抽出条件(フィールド=$1~$13) $9==1 かつ $10==1 かつ $11==0 かつ $12==0 かつ $13==1002 出力するフィールド $1,$2,$4,$7,$8 出力結果 BB.dat(CSV形式) bbb,22,44,77,88 ddd,22,44,77,88 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム Perlで空白行を削除 現在、Perlにて外部のcsvファイルを読み込み、"重複行"と"空白行"を削除するプログラムを作成しています。 重複行を削除する部分は ------ open(IN, "csvtime.csv"); @data = <IN>; close(IN); @data = grep {!$count{$_}++} @data; open(OUT, "> csvtime.csv"); print(OUT @data); close(OUT); ------ でできたのですが、空白行を削除する部分がわかりません。 申し訳ないのですが、お教えいただけないでしょうか。 また、空白行で最初の空白行は残すようにしたいです。 よろしくお願いいたします。 例) 読み出しデータ ----- (ヘッダ1行目) (ヘッダ2行目) (ヘッダ3行目) (必要な空白) (ヘッダ4行目) 00:00:00,302 00:01:00,274 00:02:00,272 00:03:00,248 00:04:00,237 00:05:00,239 00:05:00,239 00:06:00,256 00:07:00,260 00:08:00,250 00:09:00,253 00:10:00,241 ----- 加工後データ ----- (ヘッダ1行目) (ヘッダ2行目) (ヘッダ3行目) (必要な空白) (ヘッダ4行目) 00:00:00,302 00:01:00,274 00:02:00,272 00:03:00,248 00:04:00,237 00:05:00,239 00:06:00,256 00:07:00,260 00:08:00,250 00:09:00,253 00:10:00,241 ----- perlでの入れ子文字列削除 perlを利用して文字列処理を行う際に、入れ子になった文字列を削除したいのですが、正規表現のうまいやり方が思い浮かびません。 例としましては 今日は雨(雪ではない(この辺の処理に困っている))が降っている。 という文章を 今日は雨が降っている。 と処理できるようにしたいです。 $data =~ s/(.*?)//g; $data =~ s/)//g; というやり方では、3重以上になった時の処理ができません。 できれば何重になっても可能な方法をご教示ください。 特定の文字を連結し、余分なセルは削除したい 元々1つのセルに入力されているデータを、それぞれの値で集計するためMID関数で 分割していますが、特定の文字だけ左側のセルと連結をし、特定の文字だけ 入力されているセルは削除したいと思っています。 連結は「置換」で何とか出来たのですが、特定のセルを削除し、左にシフトする 何か良い方法はありますでしょうか? 宜しくお願いいたします。 特定文字での文字化け DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。 シート内の特定の列に入力されている文字を判別し、条件に合わない行を削除する シートの特定列(ここではG列)に入っている文字を判別して、不要な列を削除するマクロを考えています。 G列にはさまざまな文字が入っていますが、その中で"甲"、"乙"、"○"、"優"、"良"とある行だけを抽出して(G列に左記以外の文字が入っている行は削除して)クリップボードに取り込めれば成功です。 抜き出したくない文字はいろんなパターンがあり、「特定の文字を検索して該当行を削除」ということができません。 データはA1-K1までがヘッダ、A2以下が検索したい元のデータです。 少なくともA列はA2以下、表の終わりまでデータがぎっしり詰まっているので、表全体のサイズは取得できます。 そこで、取得したforでループを作ってみたのですがうまく動いてくれません。 マクロの技術としては基本中の基本のことのように思えますが、どこをどう組めばよいのでしょうか? 漠然とした質問で申し訳ありませんが、よろしくお願いします。 perlで特定行から特定行までを抜き出しor置換 perlで以下のようなことをしたいと考えています。 以下のことを、コマンドラインから「perl ~」という形で 実行したいのですが、どのよにすればよいでしょうか。 1.特定行から特定行までを抜き出し 2.特定行から特定行の範囲で文字列置換 例えば、次のようなテキストファイルがあったとします。 example.txt ================================== #START aaaa hogehoge test okok perl script #END ================================== 上記ファイルを読み込んで、 1.「#START」から「#END」の間に挟まれた行だけ抜き出し 2.「#START」から「#END」の間で、「test」を置換 のです。 sedで言うところの sed -e '/#START/,/#END/ s/YYYYMM/201603/g' test.txt をやりたいのです。 特定のフィールドの文字列を取得 初心者ですがよろしくお願い致します。 □わからない事 ・特定のフィールドの文字列を取得 ・取得した文字列を配列に格納 □条件 ・mysqlにはすでにデータが登録済み ・PHPより操作 □具体例 フィールド名(hogehoge)に文字列が入っています。 AAAAAA(10000レコード) BBBBBB(5000レコード) CCCCCC(3000レコード) DDDDDD(1000レコード) ・・・・・・(・・・・レコード) 重複が多数ありますが、重複しない文字列だけを取り出して配列に格納したいと思っていますが、うまいやり方がわかりません。 どなたか教えて頂けませんか? よろしくお願い致します。 Perlで メールアドレスを削除する方法 PerlでCGIを組んでいます。 textareaで入力され送信された内容から メールアドレスを削除したいのです。 例えば、 ***@xxx.yy.zz のような文字列があったら 自動的にそれを削除するには、 どんな方法が一番簡単に記述できるでしょうか? もっと砕けていえば、 「@ を検索して、その前後5文字ずつを消す。」 とかそんなイメージのことでも構いません。 つまり、メールアドレスを不完全な形でもいいから自動的に削除したいのです。 何かアイデアがありましたら教えてください。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
ご回答いただきありがとうございました。 ご教授いただいた内容で無事解決いたしました。 また何かありましたら宜しくお願い致します。