如何从matlab中的表格单元格中提取字符串

时间:2018-02-06 00:00:35

标签: string matlab csv cell

我在Matlab中导入了一个csv文件data_tr

1, abc
2, def
...

现在打算在我的代码中使用字符串,如

save_location = strcat('trial\tr_',data_tr(i,2),'.png');

这导致以下错误:

  

输入必须是字符向量,字符向量的单元格数组或字符串数​​组。

变量data_tr(i,2)被认为是1x1表而不是字符串。

在看到一些答案(this之后)之后,我也尝试了这个:

da = data_tr(i,2);
h = [da{:}];
save_location = strcat('trial\tr_',h,'.png');

但是这显示了一个下标错误:

  

使用main时出错(第14行(即行h = [da {:}];))

     

您不能使用线性索引(一个下标)或多维索引(三个或更多)下标表   标)。使用行下标和变量下标。

任何人都可以帮我从csv文件中提取字符串。

2 个答案:

答案 0 :(得分:1)

使用花括号访问表元素

class PrintDemo {

   public void printCount() {

      try {

         for(int i = 5; i > 0; i--) {
            System.out.println("Counter   ---   "  + i );
         }
      } catch (Exception e) {
         System.out.println("Thread  interrupted.");
      }
   }
}

class ThreadDemo extends Thread {
   private Thread t;
   private String threadName;
   PrintDemo  PD;

   ThreadDemo(String name,  PrintDemo pd) {
      threadName = name;
      PD = pd;
   }

   public void run() {

      synchronized(PD) {
         PD.printCount();
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }

   public void start () {
      System.out.println("Starting " +  threadName );

      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }

   public void joinInsideThread() throws InterruptedException {
       if (t != null){
           t.join();
       }
   }
}

public class TestThread {

   public static void main(String args[]) {
      PrintDemo PD = new PrintDemo();

      ThreadDemo T1 = new ThreadDemo("Thread - 1 ", PD);
      ThreadDemo T2 = new ThreadDemo("Thread - 2 ", PD);

      System.out.println("1");
      T1.start();
      System.out.println("2");
      T2.start();

      // wait for threads to end
      try {
         System.out.println("3");
         T1.joinInsideThread();
         System.out.println("4");
         T2.joinInsideThread();
         System.out.println("5");
      } catch (Exception e) {
         System.out.println("Interrupted");
      }
   }
}

或者将其转换为单元格,因为data_tr{i,2} % Get the element of a table rather than data_tr(I,2) 可以获取单元格输入

strcat

答案 1 :(得分:0)

听起来您正在使用某些导入工具(例如this)手动加载数据。您可以通过loading the data programmatically让自己更轻松。这样您就可以根据您正在使用的特定文件格式定制数据加载,并可以更好地控制数据格式。

例如,对于您的给定示例文件,您可以使用xlsread

[~, strData] = xlsread('data_tr.csv');  % Load string data into a cell array
strData = strtrim(strData);             % Remove leading or trailing blanks
...
save_location = strcat('trial\tr_', strData{i}, '.png');  % Access a string

或者您可以使用textscan

fid = fopen('data_tr.csv', 'r');               % Open file for reading
C = textscan(fid, '%*d%s', 'Delimiter', ',');  % Read just the strings
fclose(fid);                                   % Close file
strData = C{1};                                % Remove cell encapsulation
...
% Use the same way as above