matlabでの改行文字の検出方法とテキストファイルの書き換え方法

このQ&Aのポイント
  • matlabでのテキストファイルの書き換え方法と、改行文字の検出方法について教えてください。
  • 質問者はmatlabでテキストファイルを書き換えたいが、改行文字の検出がうまくいかないとのことです。
  • 具体的な例として、指定のテキストファイルのある行を他のファイルに書き換えるスクリプトを試していますが、正しく機能しません。改行文字のみの行を検出する方法を教えてください。
回答を見る
  • ベストアンサー

matlabでの改行文字について

matlabでのテキストファイルの書き換えを行いたいのですが,改行文字の検出ができません.(C言語では作れますが,matlabで作りたいのです.) 例として以下のファイル(read.txt)の書き換えの方法を教えてください. start 0 1 2 abcdef 0 1 2 3 4 xyz end 上のファイルにおいて,abcdef以下の01234を他のファイルに書き換えたく,以下のスクリプトを作成しました. Path1='read.txt'; Path2='write.txt'; judge=0; Fid1=fopen(Path1,'rt'); Fid2=fopen(Path2,'wt'); while feof(Fid1)==0 Line=fgets(Fid1); if Line=='\n' judge=0; elseif judge==1 fprintf(Fid2,'%s',Line); end if strcmp(Line,'abcdef\n')==1 judge=1; end end fclose(Fid1); fclose(Fid2); end ここで,知りたいのは「Line=='\n'」と「strcmp(Line,'abcdef\n')==1」の条件文がうまく働いてない理由です.これを実行すると何も書かれてないファイルが作成されます. strncmp(Line,'abcdef',6)とするとこちらはうまく認識しますが,改行文字のみの行の検出はどのようにして行えばよいのでしょうか.

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

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

改行コードと正規表現の\nを比較演算子では 比較できないでしょうね・・ 改行コードは改行コードと比較すればいいんじゃない? 改行コードは [code(10) code(13)] だったかな。 sprintf('\n') でも生成できたかも 手元にmatlabないんで未確認です。 C言語でも同じだと思うけどね。

Lokapala
質問者

お礼

改行コード"char(10)"を使って,改行文字を認識させることができました.あと,C言語だとfgetsで1行をchar型の配列(buffer[])に格納した後, (buffer[0]=='\n')で比較できます. ありがとうございました.

関連するQ&A

  • MATLABで配列をファイルへ書き込む方法

    現在MATLABについて勉強しているのですが、配列M(N×N、Nは任意)をファイル(.txtなど)に書き込む方法が分からず困っています。 fid=fopen('matrix.txt','wt'); fprintf(fid,'%6.4f',M); fclose(fid); このように書いているのですが、全要素が1行に並んでしまいます。 N行N列の形で配列をファイルに出力したいのです。 どなたか初心者でも理解できるようご教授お願い致します。

  • matlabのエラー

    座標データが書き込まれたテキストファイルからデータをmatlabで読み込みたいのですが,作成したスクリプトでエラーが出ます.テキストファイルの形式はx,y,z座標がスペース区切りで1行ごとに書き込まれてます.以下作成したスクリプトです. path='coordinate.txt'; fid=fopen(path,'rt'); while feof(fid)==0 Line=fgets(fid); zahyou=sscanf(Line,'%f%f%f'); x(i)=zahyou(1); y(i)=zahyou(2); z(i)=zahyou(3); end fclose(fid); これを実行すると次のエラーメッセージが出ます. Attempted to access (1); index out of bounds because numel(zahyou)=0. エラーが出てるのはx(i)=zahyou(1)で,何がいけないのかさっぱりわかりません. さらにわからないことに,whileをなくして,一番最初の一行だけ読むときは,普通に動きます. 何がいけないのでしょうか.

  • MATLABのファイル読み込みに関して

    こんにちは,今回MATLABでのファイル読み込みに関して質問したいことがあり書き込みました 現在in_1-C110.txt,in_1-C120.txt,......in_1-C190.txt'というファイルがあり,これらのファイルをまとめて読み込もうとして以下のようなコードを記述しました for a=1:9 %ファイルを読む fin=fopen(['in_1-C1' a '0.txt'],'r');     %a A=fscanf(fin,'%f %f %f %f %f %f %f',[7 inf]); fclose(fin); (略) end このように,ファイル名の最初と最後は共通なので,異なる部分のみをループさせて連続して読もうとしています ところが,この方法だとInvalid fid.と出てしまいます 調べてみると、意図したものでは%aのところが in_1-C110.txt in_1-C120.txt となるはずだったのですが,fscanfを抜いてこのファイル名のところだけ書き出すようにしてみると in_1-C1(変な文字)0.txt in_1-C1(変な文字)0.txt といったような変数の部分が文字化けを起こしていることがわかりました. したがって,ファイルが読めない原因がこれにあるのだと推察したのですが,解決方法がまったくわからない状態です この問題を解決する方法がわかる方がおられましたら,教えていただけないでしょうか?

  • MATLABでのデータ保存(for文等で)

    初めて質問させていただきます。 MATLABで以下のようなfor文で1000回まわすとします。 for i=1:1000 c=rand(1000,1); fid=fopen('data1','wt'); fprintf(fid,'%f\n',c); end このままでは、最終的に1000回目のcの値だけがdata1に保存されます。 そうではなく、1~1000回目のcの値をそれぞれ別のファイルとして保存したいと思っております。(できればdata1~data1000という形で) 参考書などを読みあさったのですが、どう組めばいいのかわからず困っています。 for文等で、保存するファイル名の名前を、繰り返す度に変える方法などご存知の方おりましたら教えてください。よろしくおねがいします。

  • 文字列の比較について

    99としか書いてないファイルxxx.txtが有り、以下のようにして読み込みました。 char aaa[256]; if((fin=fopen("c:\\xxx.txt","r"))==NULL){ AfxMessageBox("読み込みファイルオープン出来ません"); return TRUE; } while((fgets(aaa,256,fin))!=NULL){ } fclose(fin); そしてstrcmpで比較したところ、1が返り等しくないと判定されます。 strcmp(aaa,"99") どうすれば等しいと判定できるようになりますか?

  • matlabでの文字列の比較

    Matlabの初心者です。 CSVファイルを読み込んで、その中から特定の文字列がどこにあるかを探したいと思っています。 最初にすべてのデータを読み込んで all= textscan(fid, '%s', 'delimiter', '\n'); idata=all{1,1}; x=find(cellfun('isempty',idata)); idata(x)=[]; data_s=whos('idata'); adata=cell(data_s.size(1),10); for n=1:data_s.size; dummy=strtrim(textscan(idata{n},'%q %q %q %q %q %q %q %q %q %q','delimiter',',')); % dummy=regexp(idata{n},',','split'); for i=1:10; adata{n,i}=dummy{i} ; end gg=strcmp(dummy,'《ファイル情報》') end と行ってみましたが、変数で見ると文字列「《ファイル情報》」がありますが、比較では0となり検出できません。 変数表示のところで、同じ所にコピー、貼り付けを行うと検出するようになります。 何か、表示では見えない文字が入っているのかもしれませんが、どのように調べれば良いのかわかりません。よろしくご教授ください。

  • fopenの追記モードについて

    宜しくお願いします。 fopenで追記モードでファイルを追記するとき、 FILE *fp; fp = fopen("hogehoge.txt", "a"); fprintf(fp, "aaa\n"); fclose(fp); fopen("hogehoge.txt", "a"); fprintf(fp, "bbb\n"); fclose(fp); と毎回ファイルを開きなおすと、出力結果が bbb aaa となってしまうのですが、 aaa bbb と出来ない物でしょうか?

  • fwriteで改行出来ない

    $fno = fopen($newsFilePath."/test.txt", 'w'); fwrite($fno, 'test\r\n'); fwrite($fno, 'test\r\n'); fclose($fno); とすると、きちんとファイルは生成されるのですが、 中身が「test\r\ntest2\r\n」になってしまいます。 「\r\n」の位置で改行して2行で出力させるには、 どうすればいいでしょうか? 前はたしか\r\nでうまくいっていたんですが、、、 何がいけないんでしょう? どなたかお分かりの方教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイル出力で改行を入れたい!

    data.txtにファイル出力を行うのですが、gets(c)で入力した一語一語に改行を入れてdata.txtに出力したいのですがどうすればよいでしょうか。 返答のほどよろしくお願いいたします。 include<stdio.h> #define SIZE 20 void main(void) { char c[SIZE], *p; FILE *fp; fp = fopen("data.txt","w+"); p = c; while(gets(c) != NULL){ fputs(p,fp); } fclose(fp); printf("data.txtへ出力しました\n"); }

  • 昇順ソート

    sort.txtから読み込んだ値を 昇順でソートして出力するにはどうしたらよいでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <search.h> /* 比較関数 */ int strcmp_asc(const void *, const void *); int main(void) { FILE *fin, *fout; int i; int length; char s[256], s2[256]; if( (fin=fopen("sort.txt","r"))==NULL) { printf("入力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } if( (fout=fopen("file2.txt","w"))==NULL) { printf("出力ファイルがオープンできません\n"); exit(EXIT_FAILURE); } while(fgets(s, 256, fin) != NULL) { /* 要素数を求める */ length = sizeof(s) / 256; /* 昇順でソート */ qsort(s, length, 256, strcmp_asc); /* memset(s2, NULL, sizeof(s2)); for (i = 0; i < length; i++) { } */ fprintf(fout,"%s\n",s2); } fclose(fin); fclose(fout); return 0; } int strcmp_asc(const void *sa, const void *sb) { return strcmp((char *)sa, (char *)sb); } sort.txt 50 45 35 25 15 10 5 1 32 46 8 7 9 19 18 14 16 13 12 17 11 20 40 30 31 3 2 37 38 36 33 39 34 49 47 48 4 6 44 42 43 41 21 22 26 24 28 29 27 23

専門家に質問してみよう