从具有浮点数和字符串混合的文本文件中获取值

时间:2018-03-06 14:58:41

标签: matlab

我正在努力处理我必须阅读的文本文件。在此文件中,有两种类型的行:

  • 133 0102764447 44 11 54 0.4 0 0.89 0 0 8 0 0 7 Attribute_Name='xyz' Type='string' 02452387764447 884

  • 134 0102256447 44 1 57 0.4 0 0.81 0 0 8 0 0 1 864

我想在这里做的是对所有行进行文本扫描,然后尝试确定'xyz'的数量(以及总行数)。

我试图使用:

fileID = fopen('test.txt','r') ;
data=textscan(fileID, %d %d %d %d %d %d %d %d %d %d %d %d %d %s %s %d %d','\n) ;

然后我将尝试访问数据{i,16}以计算有多少等于Attribute_Name ='xyz',但它似乎并不是一个有效的。

什么是阅读数据的正确方法(我感兴趣的是计算我有多少Attribute_Name ='xyz')?感谢

3 个答案:

答案 0 :(得分:1)

您只需使用引用herepackage util; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; public class GuiTest { private JFrame frame; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { GuiTest window = new GuiTest(); window.frame.setVisible(true); Dialog d = new Dialog(); d.show(); window.frame.requestFocus(); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public GuiTest() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class Dialog extends JFrame { private JFrame frame; public void show() { if (frame == null) { frame = new JFrame(); frame.setTitle("Dialog"); frame.setBounds(100, 100, 450, 300); frame.add(new JTextField("Hello")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } frame.setVisible(true); } }

在您的情况下,您可以这样使用它:

count

filetext = fileread("test.txt"); A = count(filetext , "xyz") 会将整个文本文件读入单个字符串。之后,您可以使用fileread处理该字符串,这将返回给定模式的出现次数。

答案 1 :(得分:0)

使用旧版MATLAB时的替代方案就是这个。它适用于R2006a及以上。

filetext = fileread("test.txt");
A = length(strfind(filetext, "xyz");

strfind将返回一个数组,该数组的长度表示指定字符串的出现次数。可以通过length访问该数组的长度。

答案 2 :(得分:0)

可以选择strsplit。您可以执行以下操作:

count = 0;
fid = fopen('test.txt','r');
while ~feof(fid)
   line = fgetl(fid);
   words = strsplit( line )
   ind = find( strcmpi(words{:},'Attribute_Name=''xyz'''), 1);  % Assume only one instance per line, remove 1 for more and correct the rest of the code
   if ( ind > 0 ) then
      count = count + 1;
   end if
end

所以最后count会给你数字。