WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:Perl 一番最初の半角スペースだけを変換

0:[投稿] ひまわり [2004/04/02 17:37 ][環境:BSD BSD、perl]

Perlはじめて2日目のひまわりです。

ファイルの中を1行ずつ読んでいって例えば
----ファイルの中身---

11111[SPACE]aaaa[TAB]bbb[TAB]ccc
22222[SPACE]aaaa[TAB]bbb[TAB]ccc
33333[SPACE]aaaa[TAB]bbb[SPACE]ccc

---------------------
*[SPACE]は半角スペース
*[TAB]はタブ

といった場合に各行の1番最初の[SPACE]だけを
[TAB]にするにはどのようにすればよいのでしょうか?

s/ の変換の例とかいろいろ探しているのですが
最初の1つ目だけを変換するやりかたがわかりません。

どなたか教えてください。


1:[回答] andi [2004/04/02 17:44 ]

s/\s/\t/;

で良いんじゃないですか??


2:[質問] ひまわり [2004/04/06 11:23 ]

andiさんご回答ありがとうございます。
試しに

#!/usr/local/bin/perl

$file = $ARGV[0];
open(INFILE,$file);
open (OUTFILE, "> sample.tsv");
@records = <INFILE>;

foreach $i (@records){
    $i = s/\s/\t/;
        print OUTFILE "$i";
}
close INFILE;
close OUTFILE;

のようにしてみたのですが、出来上がったsample.tsvは
空っぽのファイル(ゼロバイト)になってしまいます。
どこがまちがっているのでしょうか・・;;


3:[完了] ひまわり [2004/04/06 11:39 ]

次のようにしてやってみたところうまくいきました。

while(<INFILE>){
    {
        s/\s/\t/;
            print OUTFILE "$_";
    }
}

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


4:[回答] SOBA-SOBA [2004/04/06 11:39 ]

はじめまして。SOBA-SOBAと申します。
これは、数字[SPASE]英数字[TAB]英数字[TAB]もしくは[SPASE]
と、いうように
・1つめが数字。
・2つめが英数字
・区切りは[SPASE]か[TAB]
であるとすると

open (IN, 'sample.csv') || die('Error');
open (OUT '>>sample2.csv');
while (<IN>) {
 $_ =~ s/(\d+$)\x20(\w+)/$1\t$2/;
 print OUT $_;
}
close (OUT);
close (IN);

で動くと思います。
あれ、$_ って正規表現の時いるんだったけな?  


5:[完了] SOBA-SOBA [2004/04/06 11:40 ]

入れ違いでもう終わってたか...
完了もう一度押しときますね。


6:[完了] AC [2004/04/06 19:58 ]

>>4
>あれ、$_ って正規表現の時いるんだったけな?
s///; は
$_ =〜 s///;
と同じ意味です。


7:[完了] SOBA-SOBA [2004/04/07 10:13 ]

やはりそうでしたか...。
回答ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World