• ベストアンサー

perlでのtext読み込み

perlで.txtファイルを読み込むのはどうすればいいのでしょうか? コマンドライン引数ではなくC言語でいうscanfのようにプログラム実行した後にtxtファイルを指定して読み込ませたいです。 わかる人がいたら教えてください、お願いしますm(_ _;m)

  • Perl
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • sample_
  • ベストアンサー率76% (20/26)
回答No.4

ファイルオープンと各行を読み込んで出力するならこんな感じですかね。 open関数は3引数、ベアワード抜きにしたいもんですね。 ------------------------------------------------------------ #!/usr/bin/perl use strict; use warnings; open my $fh, "<", "FileFullPath.txt" or die $!; while (my $line = <$fh>) { chomp($line); #行末の改行コードを削除する print $line, "\n"; } close $fh or die $!; おまけ。 プログラムの入り口で内部表現(utf8フラグ)に変換して受け取り 出口で元に戻したいよねぇーというなら --------------------------------------------------------------------------------- #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; #テキストはutf8で書かれているとする。 open my $fh, "<:encoding(utf8)", "FileFullPath.txt" or die $!; while (my $line = <$fh>) { chomp($line); #行末の改行コードを削除する print encode_utf8($line), "\n"; } close $fh or die $!;

daikon999
質問者

お礼

回答ありがとうございます 解決しました!

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

Perlの入門書や解説サイトを見たら、始めの方に出てきます。 テキスト読みこみ→加工はPerlの主戦場とも言えるところですから、解説の無い「入門書」など無いのでは?

daikon999
質問者

お礼

テキストを読みなおしました。 回答ありがとうございます

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.2

open(FILE,"file.txt"); @cDATA = <FILE>; close(FILE); これで@cDATAに配列で読み込まれるので、分解したければ以下を追加して$lineに取り込めば良いです。 foreach $line (@cDATA) {  $lineの処理 }

daikon999
質問者

お礼

回答ありがとうございます 解決しました!

回答No.1

超ざっくりで、こんな感じ? $a=<stdin>; chomp($a); open(fh , $a); while($line = <fh>) { print $line; }

daikon999
質問者

お礼

回答ありがとうございます 解決しました!

関連するQ&A

  • scriptと言うコマンド

    C言語で実行したあと、その結果をファイルに書きこみたい のですが、友達に聞いたところ、 scriptというコマンドを使えと教えてもらいました。 そしてmanコマンドでしらべてもどのように 引数を与えてやればいいのか、わかりません。 乱数を発生させるプログラムなんですが、 私が書いたのは、 script random.txt ./seiki で、実行すると スクリプトを開始しました、ファイルは random.txt です とでてrandom.txtには何も かかれていません。お願いします。

  • perl system関数 引数 フォルダ

    perlのsystem関数を使って、コマンドを実行したいのですが、 実行ファイルの引数にフォルダを指定すると、うまく動作しません。 以下のように書いています system "実行ファイル フォルダ"; 実行ファイルは .BATファイルで、 指定しているフォルダには複数のテキストファイルが入っています。 perlで書いたcgiファイルは実行ファイルと同じディレクトリにあります。 コマンドからではなく、手動でドラッグ&ドロップすると正常に動作します。 windous7でperlはActivePerlを使用しています。 引数にはフォルダを指定できないのでしょうか? またフォルダを指定できない場合、解決策などはあるのでしょうか? よろしくおねがいいたします。

    • ベストアンサー
    • Perl
  • PERLスクリプトのコマンドライン実行

    お世話になります。 Perlスクリプトをコマンドライン実行するとき、 perl スクリプト名.pl とすると思いますが、その際、コマンドライン引数を渡してスクリプト内で、その引数を見て処理したいと思うのですが、そういうことできますか?引数の渡し方、受け取り方を教えてください。

    • ベストアンサー
    • Perl
  • テキストデータの読み込みについて

    C言語のテキストデータの読み込みについてです。 C言語のプログラムについてです。 2444,1114,2807, 1984,2845,2086, 658.1,-1564.0,1239.7, -102.0,958.4,123.1, 12.7,6.0,82.7 2439,1110,2802, 1973,2865,2108, 658.8,-1563.7,1239.6, -102.0,957.1,121.9, 12.8,6.0,82.7 2441,1106,2806, 1967,2888,2124, 659.4,-1563.5,1239.5, -102.2,956.4,121.0, 12.8,6.1,82.8 2440,1109,2808, 1964,2896,2127, 660.0,-1563.3,1239.4, -102.7,956.2,120.7, 12.8,6.1,82.8 2441,1112,2807, 1981,2894,2120, 660.6,-1563.0,1239.4, -103.3,956.2,120.1, 12.8,6.1,82.8                                       ↑ 上の様なカンマとスペースで15個に区切られているtxtファイルがあるのですが、このtxtデータの10コ目と11コ目をを計算で使いたく、取り出したいと考えているのですがscanfを使いどのように取り出すことが出来るのか、また取り出したデータから数値を引くことを教えて頂きたいです。 つまり -102.0   958.4 -102.0   957.1 -102.2 と 956.4 -102.7   956.2 -103.3   956.2,             を取り出して計算に使いたいです。 そして1番上の数値だと、 -102.0と958.4 を読み込み、例えばそれぞれ100を引いた値を配列に入れたいです。 -102.0と958.4 → -202.0 と 858.4 のように取り出したいです。 教えて頂きたいです。お願いします。

  • HTMLからPerlを呼び出すには?

    今、Perlで他のサイトのtxtファイル(中身はliタグやaタグのHTMLファイルで、そのサイトではSSIで呼び出されています)を、入手して表示させるプログラムを作っています。 これを、呼び出して、あたかも私のサイトのように見せるにはどうすればよいでしょうか? 現在はiframeを使ってそのままtxtファイルのアドレスを指定しているのですが、拡張子がtxtであるため、IEでしか見れないという不具合があります。 これを解決するために、とほほさんのwww入門 http://tohoho.wakusei.ne.jp/wwwperl2.htm#socket で紹介されているPerlを参考にしました。そのPerlのファイルをブラウザから直接URL指定すれば実行できるようにはなり、txtの中身が表示されるようになったのですが、どのようにHTMLから呼び出せばよいのかわかりません。 やはりSSIで実行するしかないのでしょうか。 javascriptの場合、<script>タグでHTMLに直接スクリプトを記述できますが、Perlでもそのようなことは可能ですか?

    • ベストアンサー
    • HTML
  • PerlとCで相互に通信をさせたい

    クライアントサーバシステムによる制御システムを作っているのですが、HTMLの出力などユーザに接する主要な部分をPerlで書き、制御コマンドの発行などをCにやらせたいと考えています。そこで、例えばユーザの入力をPerlで受け、それをCに渡して実行させ、返って来た結果を再びPerlが受け取ってユーザに渡す。 こんなことってできますでしょうか。 system関数で、コマンドラインを呼び出すことはできるとは知っているのですが、引数を相互に渡せたら・・・と思うのですが・・・。

    • ベストアンサー
    • CGI
  • WindowsでPerlをする際,1行目の"#! ~"はどのように?

    Perlの参考書・本等ではプログラムファイルの第1行目は #! /usr/local/bin/perl という1行がよく有りますが,WindowsXPを用いている場合では,この1行をどう直せばよいのでしょうか? #! (perl.exeが存在するフォルダのパス) でよいのでしょうか? 私はWindowsXPを使っていて,この1行を使わずにプログラムを書いておりましたので,この1行の意味がよく分かりません。 ある参考書には,"#!はその行に書いたコマンドに,ファイルの残りの部分を渡して実行すると言う性質を持っている"と有りました。だから,試しにfile1.plとfile2.txtを準備し, file1.plの中身  #! (perlの存在するフォルダのパス)\perl.exe  while(<STDIN>){   print;  } file2.txtの中身  hello world として,コマンドプロンプトで file1.pl < file2.txt としたのですが正しく動作しませんでした.(perl file1.pl < file2.txt と入力した場合は正しく"hello world"となりました)

    • ベストアンサー
    • Perl
  • perl入門

    Perl のコマンドラインハッシュで 1.引数指定 perl -e "print 'Hello world!!';" 2.標準入力読み込み echo print "Hello World!!\n" と言うのがありますが違いがよくわかりません。 引数という言葉の意味もよくわかりません。 初歩的な質問ですがよろしくお願いします。

    • ベストアンサー
    • Perl
  • perl が 実行できない

    perl 初心者です。 apache を起動させ(起動画面は表示)、perl のファイルを IE で表示させようとして、print文を実行しても、print文がそのまま表示されるだけになっています。 perl のパスは、#! d:/perl/bin/perl です。 (コマンドラインから実行すると実行できるので、インストールは正常です。) (XP以前だったと思いますが、そのときは IEで、長文のプログラムが起動できていましたが。)

  • #!/usr/local/bin/perlで命令が出せません。

    プログラミングのド素人で、独学でwindows上でcygwinを使っている者から質問させていただきます。「#!/usr/local/bin/perl」というコマンドをプログラムの先頭に書いて、[ファイル名]を入力してcygwinで命令をしたところ、命令が実行できず、「commond not found」と出てしまいました。そこで、ネット上で、いろいろ調べて、試してみたのですが、どうしても、解決できません。 どなたか、アドバイスをいただけないでしょうか? ちなみに、perl [ファイル名]では、命令を実行することができます。「type -a perl」というコマンドを入力すると、「/cygdrive/c/Perl/bin/perl」というのがでてきたので、「#!/cygdrive/c/Perl/bin/perl」というコマンドを書いても上手くいきませんでした。 ちなみに、私が書いたプログラムは、以下のようなものです。 #!/cygdrive/c/Perl/bin/perl (あるいは#!/usr/local/bin/perl) # hello -- 挨拶のプログラム print ("hello");

    • ベストアンサー
    • Perl

専門家に質問してみよう