【问题标题】:Search and replace for a specific string in multiple lines of a text file in matlab在matlab中搜索和替换文本文件的多行中的特定字符串
【发布时间】:2018-09-04 06:48:48
【问题描述】:

我有一个文本文件,我想在其中搜索每行中的数字 255 以将其替换为数字 0。请注意,该数字作为字符串写入文本文件中。我想跳过前 13 行,因为这 13 行中有文字。

部分文本文件如下所示:

F2G_DIM 3
F2G_VERSION 1
F2G_LOCATION 0 0 0.5
F2G_ROTATION 0
F2G_ORIGIN 0 0 0
F2G_NB_NODES 300 150 50
F2G_LAGS 10 10 1
F2G_ORDER +Y +X +Z
F2G_NB_VARIABLES 1
F2G_VARIABLE_1 Facies
F2G_UNDEFINED_1 255
F2G_VALUES 
2
1
2
255
2
255
2
2
5
9

我该如何解决这个问题?

【问题讨论】:

  • 你使用的是什么操作系统?
  • @UnbearableLightness 我用的是windows。

标签: matlab file text


【解决方案1】:

对于您的第一个问题,您可以使用逻辑索引来查找和替换 255

pattern = 255; %Number to find
array = randi(10,10,1); %Some array
array([4,8,9]) = 255;

array(array==pattern) = 0; %Substitute values

对于第二个问题,您可以使用dlmread 加载数据。它允许您指定要忽略的标头。

data = dlmread('file.csv',' ',13,0); 

其中13 是要忽略的行数,0 是要忽略的列数。

总的来说,你有类似的东西:

pattern = 255; %Pattern
data = dlmread('file.csv',' ',13,0); %Load
data(data==pattern) = 0; %Substitute values 

【讨论】:

  • 谢谢!用这个我得到了答案。
  • 另外一个问题,有没有一种简单的方法可以将所有的“255”变成字母“U”,而不是“0”?
  • 你不能有一个混合类型的数组。要么是数字,要么是字符。规避的方法包括将其转换为单元数组,或者您可以使用"U" 的 ASCII 数字,即 85,尽管它仍然会在数组中显示 85。
猜你喜欢
  • 2020-05-12
  • 2013-09-18
  • 2023-02-02
  • 1970-01-01
  • 2017-01-16
  • 2017-01-06
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多