• 締切済み

LISPでフィルタープログラムを作るには。

 DOS(やUNIX)では、CやRubyなどを使い  c:\> sort < in.txt | uniq | myFilter.rb > out.txt のようにフィルタープログラムを作れるのですが、LISPではどうしたらいいのかわかりません。  関連本にはリスト処理や再帰の例題や解説はあるのですが、この方面はほとんど見たことがありません。  質問は、標準入力から一行のテキストデータを受け取り、処理後標準出力に出力するコードはどのようなものなのだろうか、ということです。あまりにも初歩的なことで申し訳ありませんが、ご教示いただければとてもうれしいです。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

標準入力からデータを受け取り、大文字にして標準出力に出力します。 (loop for l = (read-line *standard-input* nil nil) while l do (write-line (string-upcase l)))

takayama1950
質問者

お礼

LispBox で確認しました。たしかにキーボードからの入力がコンソールに出力されました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語のプログラム中に使うsystem()関数に変数を使う場合

    C言語のプログラム中に使うsystem()関数に変数を使う場合 system("sort < a.txt |uniq >aa.txt"); という関数を使うと テキストファイル a.txt は編集(sort,uniqにより)され aa.txt となるのですが このファイル名を変数として扱いたいので char str[255]; for(z=0; z<255; z++){ sprintf(str,"sort < %d.txt |uniq >0%d.txt", z, z); system(str); } という形にすると 0.txt → 00.txt 1.txt → 01.txt と255.txtまで編集されると思ったのですが 編集後のファイルが白紙で現れてしまいます。 system("sort < a.txt |uniq >aa.txt"); のファイル名に変数を扱い 複数のファイルの編集をするためには どのようなプログラムを作成すると良いのでしょうか? ご回答よろしくお願いいたします。

  • 知り合いに頼まれて作ったプログラムで

    ちょっと聞きたいことがあります。rubyを実行するために作りました。 GUIのテキストで入力したものを、sercgボタンを押すとmemo.txtに吐き出します。そして、execを押したときに、ruby rubyed.rbガ実行され、その結果が新しく開くテキスト欄に出力されるように作りました。memo.txtができればruby rubyed.rbガ実行されて万事うまくいくらしいのですが、テキストに日本語を入力したときにはうまくいかないと指摘されました。僕は友人が使っているマシン(FreeBSD)が原因だと思う(日本語入力や出力の設定ができていないらしいです)のですが、 何か僕のプログラムガおかしいのでしょうか? system.javaとsystem_ruby.javaがあります。いまsystem.javaをいかに示したいのですが、ここには800文字しか入れられないので、どっちも残りの字数では入りきりません。どなたか何でもいいので回答してもらえないでしょうか?補足なら4000文字入るのでそこに二つのプログラムを書き込めます。

  • VB2005で重複件数を調べたい

    VB初心者ですがUNIXコマンドの『uniq -c』のような重複件数を 出力して重複行を1行だけ出力したいのですがどう書けばよいのでしょうか? 【DATA】 3010 3020 3010 3011 3010 【処理結果】 3010,3 3011,1 3020,1 ご教授おねがいします。

  • ソートのプログラム

    100個の整数をファイル「int.txt」から出力して小さい順にソートして「out.txt」に書き込むC言語のプログラムなんですけど、自分で何回やってもできないのでどうか教えてください。

  • 多数あるファイル(text base)の*行目だけを引っ張ってきて標準出力させたい。

    Unix初心者です。 SunOS > head -1 ./*.txt とすれば、以下のように1行目だけを引っ張ってきて標準出力させる事も可能ですが。 ==> 1234.txt <== hello ==> 1235.txt <== hello SunOS > head -2 ./*.txt とすると、1行目と2行目が標準出力されます。 ==> 1234.txt <== hello bye ==> 1235.txt <== hello bye ですが、以下に例をあげますが、このように " 2行目だけ " を標準出力させたいのです。 ==> 1234.txt <== bye ==> 1235.txt <== bye sed -n '2p' ./*.txt だと、理由は不明ですが一つのファイルしか標準出力されませんでした。 head 、sed でなくともawk grepでも構いません。 その他の自分の知らないコマンドで構いません。 文字検索ではなく、*行目と行数指定です。 できれば、ファイル名も同時に出力させたいのです。 欲を言えば、行数も出力させたいです。 更に、翌を言えば、指定行を増やせたら最高です。 例;)1行目と3行目を標準出力する。 scriptを作りこまずに、|(パイプ)でつなげれば一行のコマンドで処理可能なのでは ないかと想像してますが、いかがでしょうか。 宜しく頼みます。

  • 二つのファイルを読み込み、一つのファイルへ出力を行うプログラム

    初めて質問させていただきます。 専門学校にて以下のようなPerlの課題に取り組んでおります。初学者です。 ---------- 二つのファイルを読み込み、一つのファイルに出力を行う。但し、以下の条件で出力を行うこと。 (1)ファイルはすでにソートされているものとし、プログラム内でソートを行う必要はない。 (2)同じデータは一つしか出力しない。 ---------- 課題の意図としては、二つのファイルから一行ずつデータを読み込み、文字列比較をさせたのち、既出のもの(重複)は出力させない~みたいなことを求められています。 ---------- ■データ例 「A.txt(元データファイル)」 A00001 A00002 「B.txt(元データファイル)」 A00000 A00002 A00005 「C.txt(結果出力ファイル)」 A00000 A00001 A00005 ---------- まず、行き詰っているのは二つの元データファイルからデータを一行ずつ読み込み、比較する部分です。 関数で読み込ませ、if文で文字列比較するのはなんとなく分かるのですが、どう表現させてよいのかが、いまひとつ分かりません。 回答はじめ、ヒントとなる基本的な考え方を教えていただけると幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • パイプ

    C++からはじめたので、パイプについてよくわかりません。 DOSで dir | more とか、UNIXで ls | more とかやると、前のコマンドの標準出力を、後ろのコマンドの標準入力に渡すというのは、わかるんですが、これはDOS上、UNIX上でのことですよね。 プログラムToプログラムで、パイプを使うには、どうしたらよいのでしょうか。

  • Ruby のコードの実行の仕方がわかりません。

    Ruby のコードの実行の仕方がわかりません。 私は、Javaプログラマーなのですが、Javaコードに行番号をつけて 整形したHTMLコードを出力してくれるツールを探していたところ Rubyで書かれたツール rb2html.rb にたどり着きました。 そこで、   http://rubyinstaller.org/download.html のサイトから、Ruby 1.8.7-p249 (RC2) をダウンロードし、WindowsXP(SP3)の   C:\Program Files\Ruby にインストールし   C:\Program Files\Ruby\bin にパスを通しました。コマンドプロンプトにて   C:\> ruby --version の入力に対して   ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32] と出力されますので、インストールまでは成功していると思います。 次に、 rb2htmlrb を   http://www.nslabs.jp/rb2html.rhtml から   rb2html-2.4.tar.gz をダウンロードし、解凍後、rb2html-2.4 を   C:\Program Files\Ruby に置きました。 そして、とりあえずテストとして、同梱のsamples/Hoge.java で動作を確認してみようと   C:\Program Files\Ruby\rb2html-2.4>rb2html.rb samples/Hoge.java   | と入力してみたところ、何も出力されず、上記のようにカーソルが 点滅した状態で止まってしまっています。 どこに、問題があるのか、ご教授いただければ幸いです。

  • 標準出力をDOS窓を開かずにファイルに書き込む方法

    VC++(Console Appli)です。 あるコマンドの標準出力結果をファイルに吐き出す方法として、 単純には、 system("cmnd > C:\\temp.txt"); とやれば実現できますが、このとき、一瞬ですが、DOS窓の黒枠が表示されます。 このDOS窓を出さないで済む方法があれば教えてください。 標準出力を何らかの方法で受け取って、 ------------------------------------------------- CString str; CStdioFile file;   :  cmndの標準出力結果をstrへ内部的に受け取らせる。   : file.Open(_T("c:\\temp.txt"), CFile::modeWrite); file.WriteString(str); file.Close(); ------------------------------------------------- などで簡単に出来れば良いのですが・・よろしくお願いします。

  • uniqとループを使用しないで、文字列のフィルターの方法

    表題の件にて、質問です。 bashでshを作成しています。いろいろ試しているのですが、 UNIXのコマンドで、uniqコマンドがありますが、それと同じことをsed又は、awk等を使用して、作成することは可能でしょうか? 作成が可能であれば、記述方法を教えてくださいませ。 ※ループ文を使用しないで、出来るだけ完結なコマンド文にしたい。 例: file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。 ご存知の方いらっしゃいましたら、ご教示ください。