質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Q&A

解決済

1回答

1552閲覧

perlでcsvファイルにデータを書き出す際に半角空白で文字列連結すると改行されてしまう。

churisuke

総合スコア5

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

0グッド

0クリップ

投稿2020/04/13 07:11

編集2020/04/13 07:21

前提・実現したいこと

perlで2つのファイルからデータ抽出し、文字列連結しcsvに書き出すプログラムを作成しています。
2つのデータを半角空白で結合し、csvに書き出す機能を実装中に問題発生しました。

発生している問題・エラーメッセージ

csvを確認すると半角空白部分でデータが改行されている。
※keywordを「トヨタ プリウス」と表示させたい

csv

1campaign, adgroup, keyword 2その1,会社名_車種,トヨタ 3プリウス

該当のソースコード

perl

1my @out; 2while(my $value01 = <@word_str01>){ 3 (my $ad_group01, my $ad_word01) = split(/,/,$value01); 4 chomp $ad_group01; 5 chomp $ad_word01; 6 7 while(my $value02 = <@word_str02>){ 8 (my $ad_group02, my $ad_word02) = split(/,/,$value02); 9 chomp $ad_group02; 10 chomp $ad_word02; 11 #データ書き出し準備 12 #ad_01とad_02のデータを連結する 13 #キャンペーン名,グループ名1_グループ名2,KW01 KW02 14 push @out,$ptn_name . "," . $ad_group01 . "_" .$ad_group02 . "," . $ad_word01 . ' ' . $ad_word02; 15 } 16} 17#ファイルの出力 18#出力件数 19#最初だけ新規で開き、2件目以降は上書き 20my $OUT; 21 22if($index<1){ 23 open($OUT,">$out_file"); 24}else{ 25 open($OUT,">>$out_file"); 26} 27#ヘッダの出力 28if($index<1){ 29print $OUT "campaign, adgroup, keyword \n"; 30} 31#キャンペーン、グループ名、KWを$OUTに追記していく 32while(my $value = <@out>){ 33print $OUT "$value\n"; 34} 35close ($OUT);

試したこと

半角空白を”_”などの別の文字で置き換えた場合には改行されないことを確認

補足情報(FW/ツールのバージョンなど)

perl5.30

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

while(my $value = <@out>){
print $OUT "$value\n";
}
上記を
foreach $value (@out){
print $OUT "$value\n";
}
に変えてください。

my $value = <@out>の構文が正しいかどうかはわかりませんが、
上記の構文を実行した場合、
1つの要素中に空白があると、2つの要素として扱っているように見えます。

投稿2020/04/14 04:35

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

churisuke

2020/04/15 06:52

修正したら直りました!! ご指摘いただいた通り、1つの要素内に空白があるため2要素として判別されていたようです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問