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

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

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

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

Q&A

解決済

4回答

635閲覧

ファイルを更新するといらぬスペース文字が入ってしまう。

trm

総合スコア117

Perl

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

0グッド

0クリップ

投稿2017/12/25 20:39

次のようにファイルを読み込み新しい行を行頭に入れそのファイルを保存すると、2行目から最終行まで、スペース文字が、2行目1個3行目2個4行目3個といった感じで最終行までスペース文字が増えて入って行ってしまいます。この解決策をご存知の方、ご指導お願い致します。

#既存ファイルを読み込み、配列@aaa に入れる
open(IN,"<kokyakusyouhinjouhou/ID&sougousyouhindata.csv");
@aaa = <IN>;
close (IN);

unshift(@aaa,"$sql,$name,$pass,$simei,$mail,$syouhinmei,$nedan,$q1,$file1,$File2,$File3\n");
#新しいデータが追記された配列を ID&sougousyouhindata.csv に書き出す
open(OUT,">kokyakusyouhinjouhou/ID&sougousyouhindata.csv");
print OUT "@aaa";
close(OUT);

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

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

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

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

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

guest

回答4

0

printでデータを一挙に書き出そうというのが間違いのもとです。
冗長なようでも次のように書いてみてください。

perl

1my @a; # データ丸呑み用 2open(my $fhi, "<", "kokyakusyouhinjouhou/ID&sougousyouhindata.csv") or die; 3# open(FH, "<kokyakusyouhinjouhou/ID&sougousyouhindata.csv") これは古い書き方。真似してはいけない。 4open(my $fho, ">", "kokyakusyouhinjouhou/ID&sougousyouhindata.csv") or die; 5while(<$fhi>){ 6 chomp; # 改行を削除。残しておくと文字列処理の際いろいろバグのもとになる。 7 push(@a, $_); 8} 9 10# 行をまたいだ処理が必要なら、ここに書く 11 12foreach my $a (@a){ 13 #行単位の処理が必要なら、ここに書く 14 15 print($fho "$a\n"); # 一行ごとに出力 16} 17

投稿2017/12/26 04:12

KojiDoi

総合スコア13671

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

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

trm

2017/12/27 06:27

ありがとうございました。
guest

0

配列を"(ダブルクォート)で囲んでprintすると要素の間に空白が入ります。

perl

1print "@aaa"; //1\n(空白)2\n(空白)3\n

つまり、これを何度も繰り返すと順番に空白が増えて行くわけです。

実行例:

bash

1$ cat test.pl 2#!/bin/perl 3open(IN,"test.txt"); 4@a=<IN>; 5close(IN); 6 7unshift(@a,"test\n"); 8 9open(OUT,">test.txt"); 10print OUT "@a"; 11close(OUT); 12 13$ : > test.txt 14$ seq 5|xargs -n1 perl test.pl 15$ cat test.txt 16test 17 test 18 test 19 test 20 test

投稿2017/12/25 21:02

編集2017/12/26 10:53
hichon

総合スコア5737

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

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

trm

2017/12/25 21:48

ありがとうございました!ためになりました!
KojiDoi

2017/12/26 03:58

"@aaa"で要素の間にデフォルトでスペースが入るのは確かですが、そのスペースが「順番に増えていく」などということにはなりません。
hichon

2017/12/26 10:47

1回実行するごとに、先頭に1行足され、2行目以降の行頭に空白が1つずつ足されるので順番に増えていきますよ。
KojiDoi

2017/12/26 10:57

> 1回実行するごとに、先頭に1行足され、2行目以降の行頭に空白が1つずつ足されるので順番に増えていきますよ。 質問者がやっていることとは全く違いますよね。
hichon

2017/12/26 11:07 編集

「2行目から最終行まで、スペース文字が、2行目1個3行目2個4行目3個といった感じで最終行までスペース文字が増えて入って行ってしまいます。」質問者のこの文言から、何度も同じコマンドを実行した結果と推測しました。回答に実行例を足しました。
trm

2018/02/16 01:46

まさにhichonさんのおっしゃる通りです。2行目に空白1つ3行目に空白2つ4行目に空白3つというように空白がどんどん増えてファイルに書き込まれます。
guest

0

この問題は単純にファイルに追加書き込みをすることによって解決しました。

投稿2018/02/16 01:07

trm

総合スコア117

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

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

0

自己解決

この問題はファイルに追加書き込みをすることによって解決しました。

投稿2018/02/16 01:05

trm

総合スコア117

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問