ここから本文です

perlの処理について質問です。

mxn********さん

2017/9/1221:53:42

perlの処理について質問です。

以下のようなCSVがあるとします。


"ああ","1,2,3,4,5","うう","ええ","","かか"

このCSVから「ああ」「1,2,3,4,5」のような項目値を抜き出したいです。

単純にカンマで分割すると数字部分が抜き出せないですし、ダブルクォーテーションで分割できないかと調べてみたら何も出て来ませんでした。

なんとか分割する方法は無いでしょうか??
宜しくお願いします。

各要素は値が空白でもダブルクォーテーションで囲まれます。

閲覧数:
101
回答数:
4

違反報告

ベストアンサーに選ばれた回答

rra********さん

2017/9/1309:05:53

汎用的でなくても、対象文字列に合わせて書けばよいと思います。以下に、いくつかの例を挙げてみます。

@array = split /","/, q("ああ","1,2,3,4,5","うう","ええ","","かか");
$array[0] =~ s/^"//; $array[-1] =~ s/"$//;
print "@array\n";

または、

@array = q("ああ","1,2,3,4,5","うう","ええ","","かか") =~ /"([^"]*)"/g;
print "@array\n";

  • rra********さん

    2017/9/1611:59:04

    以下のようにすれば、より一般的にコンマで分割することができます。二重引用符文字列中に \" がなければ、うまく行くはずです。" の削除は別処理になりますが...。

    @array = split /,(?=(?:[^"]*"[^"]*")*[^"]*$)/, $csv_string;

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

prwssさん

2017/9/1311:04:36

>項目値を抜き出したい

CPANで「csv」と検索すると、大抵はお望みのものが出てきます


The CPAN Search Site - search.cpan.org
http://search.cpan.org/search?query=csv&mode=all

プロフィール画像

カテゴリマスター

shimixさん

2017/9/1223:28:56

下記で切り出せると思います。

use Text::ParseWords;

$file = "test.csv";
open (IN, $file) or die "$!";
while (<IN>) {
chomp ($_);
@data = &parse_line(',',undef, $_);
for (my $i=0; $i < $#data; $i++) { print "$data[$i]\n"; }
}

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

エヌさん

2017/9/1222:12:01

クォーテーションの間のコンマを無視して分割するような関数を書いてしまうのが手っ取り早いと思います。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる