
置換でcsv(tsv?)内の複数行のデータを1行にまとめたい。(超初心者です)
正規表現とperlを一週間くらい前から勉強し始めた超初心者です。htmlとcssを多少知っているレベルの人間です。
AAA,1,2,2
データイ,3,-1,0
データロ,1,0.25,8
BBB,1,2,2
データイ,3,-1,0
データロ,1,0.25,8
CCC,1,2,2
データイ,3,-1,0
データロ,1,0.25,8
のような3行一組のデータを
AAA,1,2,2,3,-1,0,1,0.25,8
BBB,1,2,2,3,-1,0,1,0.25,8
CCC,1,2,2,3,-1,0,1,0.25,8
のように一番上の行にまとめようとしています。
miというmacのテキストエディタにcsvのデータを貼付けてやっているのでたぶんタブ区切りのカタチでやっていることになるのではないかと思っています。
いろんなサイトの見よう見真似でやった結果、
(.*?)\t(.*?)\t(.*?)\t(.*?)
データイ\t([-]??d+(?.?d+)?)\t([-]??d+(?.?d+)?)\t[-]??d+(?.?d+)?
データロ\t([-]??d+(?.?d+)?)\t([-]??d+(?.?d+)?)\t[-]??d+(?.?d+)?
で3行ごとにヒットはするようになりましたが、並べ替えの仕方がよくわかりません。
[-]??d+(?.?d+)?
をそれぞれ( )で囲んで
$1\t$2\t$3\t$4\t$5\t$6\t$7\t$8\t$9\t$10\t$12
のようにやってみましたが、$6あたりから後がでてきませんでした。
たぶんかなりとんちんかんなことをやっている気がしているのですが、20000行近いデータの集計を早急に出さなければならない状況に置かれており焦っています。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
データの並びが保証されているのならば
データ全体の中から改行+データイ|データロを削除すればいいのでは?
s/\r?\n?(?:データイ|データロ)//g;とか。。。
こんなことならテキストエディタの方が楽の予感?
あとは、地道に1行読んで1列目を削除して結合とかで十分だとおもいますよ。
@A1 = split(/,/, <>);
@A2 = split(/,/, <>); shift @A2;
@A3 = split(/,/, <>); shift @A3;
print join(",", @A1, @A2, @A3) . "\n"
とか
2、3行目の改行と1列目の文字を削除すればいいんですね。
確かに。。。
全然思いつきませんでした。
スキルアップがんばります。
ありがとうございました。
No.1
- 回答日時:
csvと、miに貼り付けたからTSV、との関係がよくわからないのですが。
1行目はすべて
2,3行目は先頭1項目以外
を横につなげる、ということでよろしいですか?
並び変えよう、などと考えず、
・1行目、2行目の改行を削除
・2行目、3行目の第1項目を削除
と考えればよいのです。
例えば
#!/usr/bin/perl
#↑実際のに合わせる
$l = 0 ; #現在の行数-1
while(<>) {
s/[\r\n]*$// ; # 改行文字を削除。CR,LF,CRLFに対応
#if ( ! /,/ ) { next;} #余計な行の削除例:カンマの無い行はとばす
#if( ( $l == 0 ) && ! /^([^,]*,){3}[^,]*$/ )) {
#next;
#} #余計な行の削除例: データ開始行まで行数をカウントしない
if ( $l == 0 ) {
# 1行目 →そのまま
print ;
} else {
s/^[^,]*,/,/ ;#先頭2項目削除
print ;
#3行目なら改行
if ( $l == 2 ) { print "\n"}
}
$l ++ ;
if ( $l > 2 ) { $l = 0 ; } # 3行目では0のもどす
}
完全に並べ替えに心が奪われていました。
この方法だと一気にできてよさそうですね。
丁寧なコメントもありがとうございます!
未来のために試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
テキストファイルで提出とは?
-
perlプログラミング 空白行削除
-
Perlのエラーについてご教授く...
-
perlをバージョンアップしたら...
-
Wallpaper Engineでおすすめの...
-
P.Cのシングルチューナーとダブ...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlについての質問
-
perlについての質問
-
Perlで特定文字列から特定文字...
-
openした後、closeしないでプロ...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
Perlのエラーについてご教授く...
-
INDIRECT 横に再度抽出したい
-
bashスクリプト
-
perlをバージョンアップしたら...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
perlのflock関数でロックをかけ...
-
Strawberry Perl for Windows ...
-
フローチャート 九九
-
perlについての質問
-
ターミナルで特定の文字と文字...
-
LinuxにおいてのPerlのプログラ...
-
P.Cのシングルチューナーとダブ...
-
PerlでUTF-8のファイルの文字列...
-
【超初心者】異なるディレクト...
-
perlで複数のファイルの処理に...
-
Perl 順位の重複
-
Perlで特定文字列から特定文字...
おすすめ情報