1

次の形式のcsvファイルを読み込もうとしています

  Var1 Val1A Val1B ... Val1Q
  Var2 Val2A Val2B ... Val2Q
  ...

また、ファイルに含まれる変数 (行) や実行 (列) の数を事前に知ることはできません。

テキストスキャンを機能させようとしていますが、何を試しても、すべての変数名を分離することも、列ごとのセル配列を取得することもできません。これは私が試してきたことです。

  fID = fopen(strcat(pwd,'/',inputFile),'rt');

  if fID == -1
      disp('Could not find file')
      return
  end

  vars = textscan(fID, '%s,%*s','delimiter','\n');
  fclose(fID);

誰か提案がありますか?

4

2 に答える 2

0

任意のファイルについて、すべての行の長さは同じですか? そうであれば、最初の行を読み取ることから始めて、それを使用してフィールドの数を数え、次に textscan を使用してファイルを読み取ることができます。

fID = fopen(strcat(pwd,'/',inputFile),'rt');
firstLine = fgetl(fID);
numFields = length(strfind(firstLine,' ')) + 1;
fclose(fID);

formatString = repmat('%s',1,numFields);

fID = fopen(strcat(pwd,'/',inputFile),'rt');
vars = textscan(fID, formatString,' ');
fclose(fID);

これで、最初のエントリが var 名で、他のすべてのエントリが観測値である cell 配列が得られます。

この場合、csvファイルだと言ったにもかかわらず、区切り文字がスペースであると想定しました。本当にカンマの場合は、それに応じてコードを変更できます。

于 2013-08-22T17:29:46.347 に答える