• ベストアンサー

lispでの文字読み込み

lispでの文字読み込み 以下のようなテキストをcommon lispで読み込んでいます。 --a.txt-- あああ いいい ううう ええええ --------- このような感じで。 (let (in str) (with-open-file (in "a.txt" :direction :input) (setf str (read-as-string in nil)) ) ) このときに、いいいの下の空行を読み込むにはどうしたらよいでしょうか? 読み込むというか、空行があることが検出できればいいんですが。

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

  • ベストアンサー
回答No.1

ちょっと何がやりたいのかイマイチ見えないんですが、例えばこう。 ;;; 実行例 CL-USER> (defparameter *str* nil) *STR* CL-USER> (let ((in (open "a.txt")))       (when in        (loop for line = (read-line in nil)           while line do (setf *str* (cons line *str*))           finally (setf *str* (reverse *str*)))        (close in))) T CL-USER> *str* ("あああ" "いいい" "" "ううう" "えええ") なお、read-as-stringって関数はANSIでは定義されてません。

okdanyon
質問者

お礼

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

関連するQ&A

  • [common lisp]データ読み込みについて

    txtファイルからデータを読み込み、dataに付置したいです。 (setq data (with-open-file (in "/test.dat" :direction :input))) って可能でしょうか? また、テキストデータの中のデータの書式はどのようにすればいいですか?(テキストエディット使用) データが文章なのですが、 ("hi how are you" "hi how are you")こんな感じで大丈夫ですか?

  • Excel VBAの文字列と数値の分類

    txtファイルで取り込んだ2行にまたがっている数値・英文字・ひらがななどを、数値だけのtxtファイルとそれ以外のtxtファイルを別々に作成し、保存するプログラムを組みたいのですが、よく分かりません。 ちなみに、使っているOSとAPはWinXP、Excel2003です。 InputData.txtの内容 A34bFg7p0 あ 1ylut890 B45LK4L え Number.txtの完成形 34701890454 String.txtの完成形 AbFgp あ ylutBLKL え '変数の宣言 Dim myFile As String Dim CC As Integer Dim XX As Integer Dim WW As Variant Dim str As String Dim tempStr As String Dim B As String Dim C As String myFile = Dir("InputData.txt") 'ファイルの読み込み If myFile = "InputData.txt" Then Open myFile For Input As #1 Do While Not EOF(1) Input #1, myText Loop '書き込みファイルの作成 Open "Number.txt" For Output As #2 Open "String.txt" For Output As #3 '数字・文字列の分類 CC = Len(myFile) For XX = 1 To CC str = Mid(myFile, XX, 1) If str >= 0 And str <= 9 Then B = B & str Else C = C & str End If Next Print #2, B Print #3, C Close #1, #2, #3 'エラーメッセージの表示 Else MsgBox "ファイルは存在しません。" End If ここまでやっている状態です。よろしくお願いします。

  • javaについて>IEのクッキーを使いたい

    IEでログインした状態であれば、ヤフーメールなどクッキーを使うHPにアクセスできるかと思ったのですがアクセスできません。どうすればよいでしょうか? 多分、javaはIEのクッキーを利用していないのですよね・・・ 何とか、IEのクッキーを利用できれば良いのですが。何か、良いお知恵はありませんでしょうか? 宜しくお願い致します。 以下、コードです。 ーーーーーーーーーーーーーーーーーーーーーーー import java.io.*; import java.net.*; class Test { static String input() throws IOException { InputStream is = new FileInputStream("url.txt");//urlを入力 BufferedReader br = new BufferedReader(new InputStreamReader(is)); String str = br.readLine(); return(str); } static void read(String str) throws IOException { OutputStream os = new FileOutputStream("log.txt",true); BufferedWriter fr = new BufferedWriter(new OutputStreamWriter(os)); URL url = new URL(str); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); for (;;) { String i = in.readLine(); if(i == null) { break; } System.out.println(i + "\n"); fr.write(i + "\n"); } in.close(); fr.close(); } public static void main(String[] args) throws IOException { Test brow = new Test(); brow.read(brow.input()); } }

    • ベストアンサー
    • Java
  • Return で文字列が返せない、、

    このような関数を作って、mainの関数に渡したいのですが、文法がダメだとコンパイラに怒られます。 private String test(){ try{ FileOutputStream fos=openFileOutput("sample.txt", MODE_PRIVATE); String text="サンプルテキストです"; fos.write(text.getBytes()); fos.close(); }catch(FileNotFoundException e){ }catch(IOException e){ } try{ FileInputStream fis=openFileInput("sample.txt"); byte buffer[]=new byte[100]; fis.read(buffer); String str = new String(buffer).trim(); fis.close(); return str; }catch(FileNotFoundException e){ }catch(IOException e){ } }なぜ返せないのでしょうか。

    • ベストアンサー
    • Java
  • Excel VBA 文字列を配列にて格納

    初心者なので、申し訳ございません。 使用しているOS WinXP、アプリケーション Excel2003 保存してあるtxtファイルに入っている文字列を、重複するデータをグループ化して、最終的に別のtxtファイルにて出力するのですが、最初の配列して格納するところから分かりません。 参考までに・・・ 入力ファイル「InputData.txt」 相川 関本 川上 関本 久保 相川 川上 久保 青木 出力ファイル「Group.txt」 相川 関本 川上 久保 青木 今のところは、ここまでやっています。 Dim A As String Dim myText2 As String A = Dir("InputDate.txt") If A = "InputDate.txt" Then Open A For Input As #1 Do While Not EOF(1) Input #1, myText2 myText = myText & myText2 Loop Open "Group.txt" For Output As #2 よろしくお願いします。

  • io error flag を消去したいのですが

    下記プログラムで一度入力がフェイルすると正常に入力動作ができなくなります フラグをリセットする方法を教えてください #include <string> #include <iostream> #include <fstream> using namespace std; void main(void) { char buffer[256]; string str; char c; ifstream ifs; //gomi.txt="123" ifs.open("gomi.txt"); ifs.read(buffer,8); //errorフラグをリセットするためにここに何がいるか教えてください ifs.iostate=0; ifs.seekg(0); for(str="";true;str+=c){ifs.get(c);if(ifs.eof()!=0)break;} cout<<"gomi.txt:"<<str<<endl; }

  • 文字列のコピー

    C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。

  • Like演算子で、[と]を文字として扱い比較したい

    今、フォルダ内のファイルリストを作成するVBA(Excel2003)を作っています。そこで、ファイル(絶対パス:フルパス)に「含まれていい文字」と「含まれない文字」(キーワード)を指定できる機能を作っています。 以前、VB6で類似の機能を作った時は、すんなり行ったのですが、VBAではうまくいきません。正規表現が使えるに越したことはないのですが、「 [ や ] を文字として認識するだけでもいいです。」 リストを作るフォルダには、  [20].txt  テキスト[a]txt  メモ[10] - コピー.txt などのテストファイルとその他ファイルが存在します。 キーワードを指定しないときには、うまく行きます。 指定すると、たとえば [10].txt というファイルがヒットしないように、NGワードを [10] を指定すると、[20].txtまでヒットしません。[a]では全てがヒットしません。 また、OKワードに[10]を指定すると[10]と[20]がヒットします。 ===== NGワードを比較している部分 ==== 引数:in_str が NGワード(スペースで区切って複数指定可能) 引数:target_Str がフルパス Public Function keywords_NG(in_Str As String, target_Str As String) As Boolean   If in_Str = "" Then     keywords_NG = True     Exit Function   End If      Dim wordArray() As String   Erase wordArray()   wordArray() = Split(in_Str, Space(1))     Dim tempFLG As Boolean   tempFLG = True      Dim wordIDX As Long   For wordIDX = 0 To UBound(wordArray) Step 1     If wordArray(wordIDX) <> "" And target_Str <> "" Then       If target_Str Like "*" & wordArray(wordIDX) & "*" = True Then         tempFLG = False       End If     End If   Next   If tempFLG = True Then     keywords_NG = True   Else     keywords_NG = False   End If End Function ===== OKワードを比較している部分 ==== 引数:in_Str が OKワード(スペースで区切って複数指定可能) 引数:target_Str がフルパス Public Function keywords_OK(in_Str As String, target_Str As String) As Boolean   If in_Str = "" Then     keywords_OK = True     Exit Function   End If   Dim wordArray() As String   Erase wordArray()   wordArray() = Split(in_Str, Space(1))      Dim tempFLG As Boolean   tempFLG = False      Dim wordIDX As Long   For wordIDX = 0 To UBound(wordArray) Step 1     If wordArray(wordIDX) <> "" And target_Str <> "" Then       If target_Str Like "*" & wordArray(wordIDX) & "*" = True Then         tempFLG = True       End If     End If   Next      If tempFLG = True Then     keywords_OK = True   Else     keywords_OK = False   End If    End Function ===== [や]を区切り文字ではなくする関数 ==== Public Function keywords_escape_sequence(keywordStr As String) As String      If keywordStr = "" Then     keywords_escape_sequence = ""     Exit Function   End If      Dim myIDX As Currency   Dim str_X As String      str_X = ""        For myIDX = 1 To Len(keywordStr) Step 1     If Mid(keywordStr, myIDX, 1) = "[" Then       str_X = str_X & "[[]"     ElseIf Mid(keywordStr, myIDX, 1) = "]" Then       str_X = str_X & "[]]"     Else       str_X = str_X & Mid(keywordStr, myIDX, 1)     End If   Next      keywords_escape_sequence = str_X End Function =====================================================     If keywords_OK(keywords_OK_Str, フルパス)) = True And _       keywords_NG(keywords_NG_Str, フルパス)) = True Then         'ファイルリスト作成     end if ===================================================== 正規表現を使うためには…というページを見つけ参照設定に以下の項目にチェックを入れてみましたが、結果は変わらす □Microsoft VBScript Regular Expressions 5.5 ===== RegExp と CreateObject ==== 参照設定をできれば変更したくない場合は、RegExp と CreateObject を使えば良いとあるページに書いてありましたが、参照設定でもできなかったので、これだけは試してません。 ヒントだけでもお教えください。

  • ファイルから文字列を読み出して16進数に変換

    test1.txtというファイルから文字列を読み出して16進数に変換、という処理をしたいのですがうまくいきません。どこがどう悪いのでしょうか?ご教授のほどお願いします。 ---------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { FILE *fp; char *fname = "test1.txt"; char str[100]; int num; fp = fopen( fname, "r" ); if( fp == NULL ){ printf( "%s is not open.\n", fname ); return -1; } while( fgets(str, 100, fp ) != NULL ){ num = strtol(str, NULL, 16); printf( "%s", str ); printf("%x\n", num); //ここでうまく出力されません } fclose( fp ); return 0; } ---------------- ちなみに、test1.txtの中身は以下のようになってます。 44DB4147E6075A92E878EB68C44DD51F 5DCE86622D846BF272215A792AF31A3E 46FF69A29D3DF1D4842461B239256C26

  • JAVAと構文解析器(cabocha)の連結について

    現在、eclipseでJAVAをやっています。(環境はwindows XPです。) JAVAから構文解析器(cabocha)を用いて、文章を解析させたいと考えています。 [やりたいこと] 1.INPUTファイルを自動生成(ファイルA.txt)をする。 2.ファイルAの内容をコマンドプロンプトからCabochaを実行し、   解析を行う。 3.その結果をOUTPUTファイル(ファイルB.txt)に保存し、出力させる。 そこで、2番について教えていただきたいのですが、JAVAからコマンドプロンプロトを実行し、 cd c:\program files\cabocha\bin cabocha.exe -f1 input.txt --output=output.txt の2行をペーストし、cabochaを実行させたいのですが、どのようにすればよいのでしょうか。 自分がわかっているプログラム以下のところまでです。 [プログラム] public static void main(String[] args) throws IOException{ File file1 = new File("C:\\Program Files\\CaboCha\\bin\\input.txt"); try{ String str=null; InputStreamReader reader=new InputStreamReader(System.in); BufferedReader buffreader =new BufferedReader(reader); System.out.println("文字を入力してください。"); str = buffreader.readLine(); PrintWriter pr =new PrintWriter(new BufferedWriter(new FileWriter("C:\\Program Files\\CaboCha\\bin\\input.txt"))); pr.write(str); System.out.println(str+"が書き込まれました。"); pr.close(); Runtime rt = Runtime.getRuntime(); Process pro = rt.exec("C:\\WINDOWS\\system32\\cmd.exe"); } 誰かわかる方、ご教授お願いいたします。