• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:matlabによるNULL文字を知りたいのですがお願いします。)

matlabによるNULL文字を知りたいのですがお願いします。

このQ&Aのポイント
  • matlabでNULL文字を判定する方法を知りたいです。現在、matlabを使用して複数のcsvファイルを処理していますが、csvファイルがNULLの場合に処理を中止したいと考えています。
  • matlabを使って複数のcsvファイルを処理していますが、NULL文字を判定する方法が分かりません。csvファイルがNULLの場合に処理を中止するための条件を教えていただきたいです。
  • matlabで複数のcsvファイルを処理しているのですが、NULL文字をどのように判定すれば良いか分かりません。csvファイルがNULLの場合に処理を中止するための方法を教えていただけませんか?

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

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

既に解決済みかもしれませんが、方法は大きく2つあります。 (1)エラートラップで引っ掛ける  CYBERNETのリファレンスに因ると、load関数は存在しないファイルを読むとエラーを返すとのことなので、try~catchを使用してエラーを検出する。 (2)exist関数でファイルチェック  load関数の前にexist関数を使用してファイルが存在するかチェックする。 ちなみに、MATLABに値としてのNULLはなかったと思います。

dom-dom
質問者

お礼

ありがとうございます。大変助かりました

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

関連するQ&A

  • テキストデータでNULL?

    こんにちは。会社の人がテキストエディタでファイルを開いて、このデータはNULLが入っているからおかしいとかブツブツ言っていました。 データの中身はバイナリデータではなく、固定長、またはCSVファイルのような事を言っていました。 そこで疑問に思ったのですが、固定長、またはCSVでNULLなんてあるんでしょうか?たぶん、空文字列の事をさしてNULLと言っているような気がするのですが、テキストデータにNULLは存在するのでしょうか?

  • 文字列の入力

    I have a pen. You have 6 brothers. と書かれたテキストファイルを入力し, 文字の連結を調べたいと思っています。 例えば have だったら、 h-aが1つ a-vが1つ v-eが1つ ところが、 have a となっているためか e-aも1つとしてカウントされるのです。 スペースや数字はカウントせずに処理したいんですが、 どうすればよいでしょうか? 一応、ソースは、 #include<stdio.h> #include <ctype.h> #include <stdlib.h> int main(void) { int count[26]={0}; int ren[26][26]={0}; char c,cc='a',ccc='a'; FILE *fp,*fo; int j,jj,k=0; int i[50000]={0}; if((fp=fopen("penin.txt","r"))!=NULL){ while((c=fgetc(fp))!=EOF){ putchar(c); c = tolower(c); i[k]=c-'a'; count[i[k]]++; if(k>1){ ren[i[k-1]][i[k]]++; } k++;} } if((fo = fopen("penout.tsv", "w")) == NULL){ /* 出力ファイルオープン */ printf("出力ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } for(j=0;j<=25;j++){ fprintf(fo,"%c = %d個\n",cc,count[j]); cc=cc++; } cc='a'; for(j=0;j<=25;j++){ for(jj=0;jj<=25;jj++){ fprintf(fo,"%c %c = %d個\n",cc,ccc,ren[j][jj]); ccc=ccc++; } ccc='a'; cc=cc++;} fclose(fp); fclose(fo); return(0); } です。 もし、ソース自体をもっと スマートにできるのであれば それもご教授ください。

  • MySQL Date型にNULLが設定できない。

    csvファイルからMySQLにデータを取り込む際に、Date型やint型にNULLを設定するにはどうしたらよいでしょうか。 以下のようなテーブルに | tTest | CREATE TABLE `ttest` ( `ID` bigint(20) NOT NULL, `title` text NOT NULL, `naiyou` varchar(100) DEFAULT NULL, `kaishi` date DEFAULT NULL, `owari` date DEFAULT NULL, `peirod` bigint(20) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=sjis | 以下のようなcsvファイルを読み込んだとき(*)、 10,テスト,2008-04-05,2009-04-23,43 11,テスト,2008-04-05,NULL,43 12,テスト,2008-04-05,2009-04-23,NULL 2行目のNULLで ERROR 1292 (22007): Incorrect date value: 'NULL' for column .... とエラーが発生します。 3行目のNULLでもint型ですが同様にエラーとなります。 一方、insertで行の追加以下のようにした場合は成功します。 insert into tTest values (12,テスト,'2008-04-05',NULL,NULL) 外部ファイルから読み込んだ場合にNULL値を設定するにはどのようにしたらよいのでしょうか。 (*)以下のコマンド LOAD DATA INFILE "E:\\work\\MySQL\\sample.csv" INTO TABLE tTest FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n";

    • ベストアンサー
    • MySQL
  • Expression: nptr != NULL

    デバックではエラーが出なかったのですが、プログラムを走らせた所タイトルのような line:68 Expression: nptr != NULL のエラーが出ました。何が悪いのか分かりません。よろしければ、ご教示お願いします。 68行目もどこか書いておきました。 #include<stdio.h> #include<math.h> #include<string.h> #include <stdlib.h> #include <string.h> #include <windows.h> #include "conio.h" FILE *input; char fname[30]; int keisan(void); int main(void){ char *ret,infname[60],csv[]=".csv"; loop: printf("読み込むファイル名を入力してください\n"); scanf("%s",&fname); ret=strstr(fname,csv); if(ret!=NULL){printf("拡張子[.csv]を入力しないでください\n");goto loop;} strcpy(infname,fname); strcat(infname,csv); input=fopen(infname,"r"); if(input==NULL){ printf( "%sファイルが開けません\n",infname); return -1; }else{ keisan(); } fclose(input); return 0; } int keisan(void){ FILE *output; char outfname[60]; char str[256]; char *n,*nouse; int k=0; double n1,n2,time=60,times; int start=2; int line=0; strcpy(outfname,fname); strcat(outfname,"1.csv");//出力ファイル形式 output=fopen(outfname,"w"); while(fgets(str,256,input)!=NULL){ line++; if(line>=start){ k++; times=(double)k/time; n=strtok(str, ",");//1行目 n=strtok(NULL,",");//2行目 n1=strtod(n,&nouse); n=strtok(NULL,",");//3行目 n=strtok(NULL,",");//4行目 n2=strtod(n,&nouse);   ←←←68行目 printf("%d,%lf,%2.2lf,%2.1lf \n",k,times,n1,n2); fprintf(output,"%d,%lf,%2.2lf,%2.1lf \n",k,times,n1,n2); } } fclose(output); return 0; }

  • データの読み込みがうまくいかなくて、困っています

    プログラミング初心者です。 誤差逆伝播学習のプログラムを行っています。 C言語で、データの読み込み部分がうまくいかなくて、困っています。 borland , BCC Developerなどを用いてやっております。 やりたいことは、テキストファイルから数字を読み込み、それを行列に格納してデータとして送るということです。 その際に、テキストファイルで行と列で表示されたものを送ろうと考えています。30×30の、1と0で表示された絵と教師信号を読み取っています。 列だけの読み込みは正常に動いたのですが、行と列で表示されたものの読み込みができません。char型で変数を宣言しているので、数字として読み込めていないとか、そういったことがあるのでしょうか。o1[][],t[][]の部分に正しく値が送れるようにしたいです。 非常にわかりにくくて申し訳ないのですが、お分かりになる方がいたら、どこをどう変えれば良いか、教えて頂きたいです。 「間違っている列と行の読み込み」 //データをファイルから読み込む// void read_file(name) char *name; { int i,j,k; //ループカウンター// FILE *fp; //ファイルポインタ// char buff[MCHS]; //buffの最大文字数1024 //ファイルオープン// if((fp=fopen(name,"r"))==NULL){ fprintf(stderr,"%s:File open error !!\n",name); exit(-1); } //学習データを読み込む// fscanf(fp, "%d",&learning_pattern_no); //学習パターンの数読み込み fscanf(fp,"%d",&test_pattern_no); //テストパターンの数読み込み printf("学習パターンの数:%d\n",learning_pattern_no); //学習パターンの数表示 printf("テストパターンの数:%d\n",test_pattern_no); //テストパターンの数表示 i=0;j=0; while( fgets( buff, MCHS, fp ) != NULL ){ if(j<=learning_pattern_no+test_pattern_no-1){ for( k=0; k<MCHS; k++ ){ o1[j][i+k]=buff[k]; //o1[j][i+k]にbuff[k]を入れる printf("%c",buff[k]); //printfで確認 if( buff[k] =='\n'){ i=i+k; if (i==InputUnitNo){ i=0; j++; printf("%d",j); }//if(i==InputUnitNo)終了 break; }//if(buff[k])終了 }//for終了 }//if(j<=learn+test)終了 else{ //ここから教師信号の読み取り for( k=0; k<MCHS; k++ ){ t[i][k]=buff[k]; printf("%c",buff[k]); //教師信号の確認 if( buff[k] == '\n' ){ i++; break; }//if(buff[k])終了 }//for終了 }//else終了 }//while終了 } 「正常に動いた列だけの読み込み」 //データをファイルから読み込む// void read_file(name) char *name; { int i,j; //ループカウンター// FILE *fp; //ファイルポインタ// //ファイルオープン// if((fp=fopen(name,"r"))==NULL){ fprintf(stderr,"%s:File open error !!\n",name); exit(-1); } //学習データを読み込む// fscanf(fp, "%d",&learning_pattern_no); printf("学習データの数:%d\n",learning_pattern_no); for(i=0;i<learning_pattern_no; i++){ for(j=0;j<InputUnitNo; j++) fscanf(fp,"%lf",&o1[i][j]); for(j=0;j<OutputUnitNo; j++) fscanf(fp,"%lf",&t[i][j]); //教師信号 } //テストデータを読み込む// fscanf(fp,"%d",&test_pattern_no); printf("テストデータの数:%d\n",test_pattern_no); for(i=learning_pattern_no;i<learning_pattern_no+test_pattern_no;i++) for(j=0;j<InputUnitNo;j++) fscanf(fp,"%lf",&o1[i][j]); fclose(fp); }

  • MATLABで行列を配列に格納する方法

    MATLAB初心者で大変申し訳ありませんが、行列の格納の仕方がわからないので、投稿させていただきました。 for k = 1:1:10 k=k; t(:,:)=load(sprintf('test%5.5i.txt',k)); end 具体的に言いますと、上記のプログラムで、test00001~test00010.txtというファイルを任意の行列t(:,:)で読み込んでいるのですが、このt(:,:)をkと対応させて、例えばk=1の場合のtをt[1]、k=2の場合のtをt[2]などの配列に格納し、それを自由に呼び出し、計算を行いたいと考えております。 基礎がわかっていないためにどうしていいかわかりません。 宜しく御願いします。

  • SQLServerのNULLのデータと空文字のデータを抽出する方法を教

    SQLServerのNULLのデータと空文字のデータを抽出する方法を教えてください! いつもお世話になっております。 下記のコードで、空文字とNULLのデータがないときはデータが抽出できました。 どなたかご教授お願いいたします! ==開発環境== SQLServer2000 VB6.0 =================================================== 【VB6.0】 '■リストボックスがあり、チェックが入っている場合は、NULL値を渡し、チェックが入っていない場合はチェックボックスのデータ(名称)をパラメータとして渡します。 '■ただし、リスト名の「(空)」にチェックが入っている場合はNULLと空文字(” ”)のデータを抽出しなければなりません!! If objList.Selected(lngListCnt) = True Then If objList.List(lngListCnt) = "(空)" Then '★★★ここが分かりません!!! .Parameters("@Ivch" & strArry(intCnt) & "List" & lngListCnt) = "NULL"←??? Else '■チェックが入っているものは検索対象の為、NULLを渡す .Parameters("@Ivch" & strArry(intCnt) & "List" & lngListCnt) = Null End If Else '■チェックが入っていないものは検索対象外の為、リストボックス内のデータの名称を渡す。 .Parameters("@Ivch" & strArry(intCnt) & "List" & lngListCnt) = objList.List(lngListCnt) End If ========================================= 【SQLServer2000】 CREATE Procedure … ( @IvchList0 VARCHAR(10), @IvchList1 VARCHAR(10), @IvchList2 VARCHAR(10) @Oint件数 INT OUTPUT) AS --■条件に合致する件数を取得し、返します SELECT @Oint件数 = COUNT(*) FROM TB取込 WHERE ((Aテーブル.あ列 <> @IvchList0) OR (@IvchList0 IS NULL)) AND (((Aテーブル.あ列 <> @IvchList1) OR (@IvchList1 IS NULL)) AND (((Aテーブル.あ列 <> @IvchList2) OR (@IvchList2 IS NULL)) ・ ・ ・ 以上です。よろしくお願いします!

  • MATLAB 256列以上の配列格納について

    こんにちわ。 現在、matlabで行971、列971程度の配列を用いて画像化したいと考えています。 しかし、列が256を超えるとエラーが出てしまい、処理できません。 ソースは下記の通りです。 971×971の正方形の画面にするので、1列(971×971)行などのように分割に全部入れて処理もするわけには行かないと思います。 よってなんとか256以上の列を使っていかなければならないです。 どうか、わかる方がいればお願いいたします。 //////////////////////////////////////////////////////////////// clear all; j=971; jj=5; test=[1:j,1:j]; for k=0:jj test=load(sprintf('APW%04d.csv',k)');%kの値を%04dに上書き end for i=1:j test(:,i) = abs(test(:,i)/j);%データを0~1に補正 end /////////////////////////////////////////////////////////////// エラー内容は下記の通りです。 //////////////////////////////////////////////////////////////// ??? Attempted to access test(:,257); index out of bounds because size(test)=[971,256]. エラー ==> Copy_of_Gzousyori at 14 test(:,i) = abs(test(:,i)/j);データを0~1に補正 ////////////////////////////////////////////////////////////////

  • test.csvの内容が以下のように100件位あったとして、

    test.csvの内容が以下のように100件位あったとして、 d,4,ddddd bb,2,bbbbb a,1,aaa cc,3,ccccc 以下略 やりたい事としてtest.csvを2列目をキーとして昇順にソートし、新たなファイル「test1.csv」(こちらは全件表示)に書き込み、 また、test1.csvのキリのいい所だけ抜き出したcsvファイル「test2.csv」(1件目、10件目、20件目、…と以下10の倍数毎のデータだけを書き込む) を作りたいと考えて下の様なプログラムを作っていますが、ソートの段階で詰まっています。 もしよろしければこの続きを教えて頂けないでしょうか? #include <stdio.h> #define MBF 256 #define SIZE 32 #define FNAME1 "test.csv" #define FNAME2 "test1.csv" #define FNAME3 "test2.csv" struct tb{ char a[SIZE]; char b[SIZE]; char c[SIZE]; }; int main(void) { struct tb tbl[20]; struct tb *tp; int ntb,itb; FILE* fi; FILE* fo; FILE* fq; char buff[MBF]; //== 入力CSVファイルからの読み込み処理 == fi = fopen( FNAME1, "r" ); if( fi == NULL ){ printf( "ファイル\"%s\"が開けません\n", FNAME1 ); return -1; } while( fgets(buff, MBF, fi) != NULL ) { strcpy(test.a,strtok(buff,",\"")); strcpy(test.b,strtok(NULL,",\"")); strcpy(test.c,strtok(NULL,",\"")); } fclose( fi ); //== 出力CSV(test2.csv)ファイルへの書き込み処理 == fo = fopen( FNAME2, "w" ); if( fo == NULL ){ printf( "ファイル\"%s\"が開けません\n", FNAME2 ); return -1; } for ( itb=0; itb<ntb; itb++ ){ //書き込み処理? } fclose( fo ); //出力ファイルクローズ //== 出力CSV(test2.csv)ファイルへの書き込み処理 == fq = fopen( FNAME2, "w" ); if( fq == NULL ){ printf( "ファイル\"%s\"が開けません\n", FNAME3 ); return -1; } for ( itb=0; itb<ntb; itb++ ){ //書き込み処理? } fclose( fq ); //出力ファイルクローズ return 0; }

  • MATLABの繰り返し文を用いたプログラム

    以下の様なプログラムを、一つ一つ入力しなくても、for文などを使って 簡単に出力するやり方知ってる人居ましたら教えてください。 ____________________________________________________________________ test= xlsread('test.xlsx');→あるエクセルファイルを読みだしている num=test(1:231,;);→ある行数を抽出している a1=num(2,:)./num(3,:);          a2=num(3,:)./num(4,:);           a3=num(4,:)./num(5,:);          : a230=num(231,:)./num(232,:); →a1~a230を求めている C = [a1;a2;a3...a229;a230] →上の行列をすべて結合させている _____________________________________________________________________ よろしくお願いします。

このQ&Aのポイント
  • 昨日、購入したプリンターのインクの消耗についての問題が発生しました。
  • インクのシアンの黄色いテープをはがすのを忘れたため、ノイズチェック時に色が出ず、電話で問い合わせしました。
  • インクがなくなってしまうまでの使用回数や時間について知りたいです。
回答を見る