MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)

2023-05-16

动论坛原版主eight的经典贴http://www.chinavib.com/thread-45622-1-1.html
MATLAB对于文本文件(txt)进行数据读取的技巧总结(经典中的经典)由于本帖内容较多,部分转自他人的心得,因此,凡转贴的地方仅用--------标注,原作者略去,在此对所有原作者表示感谢!

特别说明:由于大家在 I/O 存取上以 txt 文件为主,且读取比存储更麻烦(存储的话 fwrite, fprintf 基本够用),因此下面的讨论主要集中在“txt 文件的读取”上。除了标注了“转”之外,其余心得均出于本人经验之结果,欢迎大家指正、补充。

. 基本知识:
------------------------------------------------------------------------------------------------------
1. 二进制文件与文本文件的区别:
将文件看作是由一个一个字节(byte) 组成的,那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了。这就是两者的区别;接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的01,但是打开方式不同,对于这些01的处理也就不同。如果按照文本方式打开,在打开的时候会进行translate,将每个字节转换成ASCII码,而以按照二进制方式打开的话,则不会进行任何的translate;最后就是文本文件和二进制文件在编辑的时候,使用的方式也是不同的。譬如,你在记事本中进行文本编辑的时候,你进行编辑的最小单位是字节(byte);而对二进制文件进行编辑的话,最小单位则是位(bit),当然我们都不会直接通过手工的方式对二进制文件进行编辑了。

从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种:
ASCII
文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:   
   ASCII
码: 00110101   00110110   00110111   00111000   
                        
                          
 
十进制码:       5 6           7     8   

共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。

二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:00010110   00101110 只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。  

2. 文本模式(textmode)和二进制模式(binarymode)有什么区别?   

流可以分为两种类型:文本流和二进制流。文本流是解释性的,最长可达255个字符,其中回车/换行将被转换为换行符“\n”,(如果以"文本"方式打开一个文件,那么在读字符的时候,系统会把所有的"\r\n"序列转成"\n",在写入时把"\n"转成"\r\n" )。二进制流是非解释性的,一次处理一个字符,并且不转换字符。

注:  


      \n一般会操作系统被翻译成"行的结束",即LF(Line-Feed)
      \r
会被翻译成"回车",即CR(Cariage-Return)
     
对于文本文件的新行,在UNIX上,一般用\n(LF)来表示,Mac上用\r(CR)来表示,
      Windows
上是用\n\r(CR-LF)来表示。        
          
   
通常,文本流用来读写标准的文本文件,或者将字符输出到屏幕或打印机,或者接受键盘的输入;而二进制流用来读写二进制文件(例如图形或字处理文档),或者读取鼠标输入,或者读写调制解调器。如果用文本方式打开二进制文件,会把“0D   0A”自动变换成“\n”来存在内存中。写入的时候反向处理。而二进制方式打开的话,就不会有这个过程。但是,Unicode/UTF/UCS格式的文件,必须用二进制方式打开和读写。

---------------------------------------------------------------------------------------------------------

上述基础其实大可以略过,简言之,对用户来说: matlab 中存储成为二进制还是文本文件取决于fopen的方式,如果用wt,则存储为文本文件,这样用记事本打开就可以正常显示了;如果用w则存储为二进制文件,这样用记事本打开会出现小黑方块,要正常显示的话,可以用写字板或UltraEdit等工具打开。

. MatlabI/O文件操作使用技巧和总结:

1. Matlab 支持的I/O文件(对应“取/存”操作)类型:(所有文件I/O程序不需要特殊的工具箱)
http://www.mathworks.com/support/tech-notes/1100/1102.html

(注:从上表可以看到,matlab不支持doc格式的文档存取(因为doc文档包含很多格式控制符),请改用txt或者dat格式)

2. Matlab I/O文件指南:
http://www.mathworks.com/support/tech-notes/1600/1602.html


以下是部分对应的中文译文:
--------------------------------------------------------------
----------------------------------------
本技术支持指南主要处理:ASCII, binary, and MAT files.
要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令:
help iofun

MATLAB中有两种文件I/O程序:high level and low level.
High level routines: 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。
Low level routines: 可以更加灵活的完成相对特殊的任务,需要较多的额外编程。



High level routines 包括现成的函数,可以用来读写特殊格式的数据,并且只需要少量的编程。


举个例子,如果你有一个包含数值和字母的文本文件(text file)想导入MATLAB,你可以调用一些low level routines自己写一个函数,或者是简单的用TEXTREAD函数。


使用high level routines的关键是:文件必须是相似的(homogeneous),换句话说,文件必须有一致的格式。下面的段落描述一些high level file I/O routines并给出一些例子帮助理解概念。


LOAD/SAVE


主要的high level file I/O routines LOAD  SAVE函数。LOAD
可以读MAT-file data或者用空格间隔的格式相似的ASCII data. SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file
sample_file.txt 


1 5 4 16 8


5 43 2 6 8


6 8 4 32 1


90 7 8 7 6


5 9 81 2 3


Example:
LOAD and SAVE 读写数据





CODE:

% Load the file to the matrix, M :
M = load('sample_file.txt') 

% Add 5 to M :
M = M +5 

% Save M to a .mat file called 'sample_file_plus5.mat':
save sample_file_plus5 M

% Save M to an ASCII .txt file called 'sample_file_plus5.txt' :
save sample_file_plus5.txt M -ascii 

UIGETFILE/UIPUTFILE


UIGETFILE/UIPUTFILE是基于图形用户界面(GUI)的。会弹出对话框,列出当前目录的文件和目录,提示你选择一个文件。UIGETFILE让你选择一个文件来写(类似Windows ‘另存为’选项?)。用UIGETFILE,可以选择已存在的文件改写,也可以输入新的文件名。两个函数的返回值是所选文件名和路径。


Example:
UIGETFILE 从当前目录选择一个 M-file


CODE:

% This command lists all the M-files in the current directory and
% returns the name and path of the selected file


[fname,pname] = uigetfile('*.m','Sample Dialog Box') 

注意: UIGETFILE 一次只能选择一个文件。


UIIMPORT/IMPORTDATA


UIIMPORT是一个功能强大,易于使用的基于GUIhigh level routine,用于读complex data files。文件也必须是homogeneous


IMPORTDATA形成UIIMPORT的功能,不打开GUI。可以将IMPORTDATA用于函数或者脚本中,因为在函数或者脚本中基于GUI的文件导入机制并不理想。下面的例子用到包含几行文件头和文本、数值数据的文件'sample_file2.txt' 


This is a file header.


This is file is an example.


col1 col2 col3 col4


A    1   4    612.000


B    1   4    613.000


C    1   4    614.000


D    1   4    615.000


Example: Using IMPORTDATA to read in a file with headers, text, and numeric data





CODE:

% This reads in the file 'sample_file2.txt' and creates a
% structure D that contains both data and text data.
% Note the IMPORTDATA command specifies a white space 
% as the delimiter of the file, but IMPORTDATA can usually 
% detect this on its own 

D = importdata('sample_file2.txt','')  %
原文有误?

D = importdata('sample_file2.txt')


可以通过访问结构D的数据和文本域,来看结构D中的真实值,例如输入:


data = D.data


text = D.textdata


可以用UIIMPORT读同一个文件并得到同样的结构.


注意: 对于 ASCII data, 你必须检验导入向导正确的识别了列分隔符。


TEXTREAD/STRREAD


TEXTREAD 是一个强大的动态high level routine,设计用来读ASCII格式的文本和/或数值数据文件。STRREAD除是从字符串而不是文件读以外,类似于TEXTREAD


两个函数可以用许多参数来改变其具体的工作方式,他们返回读入指定输出的数据。他们有效的提供给你一个
“两全其美”的方法,因为他们可以用一个命令读入混合的ASCII和数值数据(high level routines的做法),并且你可以改变他们以匹配你特定的应用(如同low level routines做到的)。例子:





CODE:

Example 1: Using TEXTREAD to read in an entire file into a cell array

% This command reads in the file fft.m into the cell array, file 

file = textread('fft.m','%s','delimiter','\n','whitespace','');






CODE:

Example 2: Using STRREAD to read the words in a line

% This command uses the cell array created in Example 1 to 
% read in each word of line 28 in 'file' to a cell array, words

words = strread(file{28},'%s','delimiter','') 




CODE:

Example 3: Using TEXTREAD to read in text and numeric data from a file with headers

% This command skips the 2 header lines at the top of the file
% and reads in each column to the 4 specified outputs

[c1 c2 c3 c4] = textread('sample_file2.txt','%s %s %s %s','headerlines',2) 



CODE:

Example 4: Using TEXTREAD to read in specific rows of text and numeric data from a file

% This command reads in rows B and C of the file. The 'headerlines'
% property is used to move down to the desired starting row and the 
% read operation is performed 2 times 

[c1 c2 c3 c4] = textread('sample_file2.txt',... 
'%s %s %s %s',2,'headerlines',4) 



CODE:

Example 5: Using TEXTREAD to read in only the numeric data from a file containing text and numbers

% This command reads in only the numeric data in the file. The
% 'headerlines' property is used to move down to the first row 
% of interest and the first column of text is ignored with the 
% '*'  operator 

[c2 c3 c4] = textread('sample_file2.txt','%*s %d %d %f','headerlines',3) 

DLMREAD/DLMWRITE/CSVREAD


DLMREAD  DLMWRITE函数能够读写分隔的ASCII data,而不是用low level routines。他们比low level routines容易使用,Low level routines用几行代码实现的功能可以用DLMREAD/DLMWRITE简化成一行。


CSVREAD用来读分隔符是逗号的文件,是DLMREAD的特殊情况。当读空格和Tab分隔的电子数据表文件时,DLMREAD特别有用。以'sample_file.txt'为例:


CODE:

Example 1: Using DLMREAD to read in a file with headers, text, and numeric data 

% This reads in the file 'sample_file2.txt' and creates a matrix, D,
% with the numeric data this command specifies a white space as the
% delimiter of the file 

D = dlmread('sample_file.txt','') 

CODE:

Example 2: Using DLMREAD to extract the first 3 columns of the last 3 rows

% This reads in the first 3 columns of the last 3 rows of
% the data file 'sample_file.txt'into the matrix, D_partial.
%
读文件 'sample_file.txt' 3列后3行,到矩阵D_partial.

D_partial = dlmread('sample_file.txt','',[2 0 4 2]) 


CODE:

Example 3: Using DLMWRITE to write a comma delimited file

% This creates a file called 'partialD.txt' that consists of 
% the first 3 columns of the last 3 rows of data where each
% element is separated by a comma 

dlmwrite('partialD.txt',D_partial,',') 


注意: 保证DLMREAD and DLMWRITE指定范围的指标从0开始,而不是从1开始。


WK1READ/WK1WRITE


WK1READ 用来读Lotus123 电子数据表文件的数据;WK1WRITE用来写矩阵到Lotus123 电子数据表文件。


XLSREAD


XLSREAD用来读Excel的数值和文本数据。


---------------------------------------------------------------------------------------------------------

. 具体例子分析:
Matlab网站用两个例子非常详尽地介绍了各个命令的基本用法,实际中,面对手头上的数据,如何选用合适的命令呢?以下结合几个示例给出一些总结,大家举一反三就可以了:

1. 纯数据(列数相同):
源文件:



CODE:
0 3866.162 2198.938 141.140
1 3741.139 2208.475 141.252
2 3866.200 2198.936 141.156
3 3678.048 2199.191 141.230
4 3685.453 2213.726 141.261
5 3728.769 2212.433 141.277
6 3738.785 2214.381 141.256
7 3728.759 2214.261 141.228
8 3748.886 2214.299 141.243
9 3748.935 2212.417 141.253
10 3733.612 2226.653 141.236
11 3733.583 2229.248 141.223
12 3729.229 2229.118 141.186




解答:对于这个txt文件,由于各行列数相同,故简单地使用load,importdata均可。


2.字段名(中、英文字段均可)+数据:
源文件:


CODE:
CH0 CH1 CH2 CH3
0.000123 0.000325 0.000378 0.000598
0.000986 0.000256 0.000245 0.000698


解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行在文件中补上 Inf NaN),故直接使用 importdata 便可。

3.注释(含有独立的数字串)+数据(列数相同):
问题:这个文件有4,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件

源文件:


CODE:
Group 2  12.02.2006   Limei
Samples of datas: 50000

CH0  CH1  CH2  CH3
0.000123  0.000325   0.000378   0.000598
0.000986  0.000256   0.000245   0.000698


目标文件:


CODE:
Group 2 12.02.2006 Limei
Samples of datas: 50000

CH0 CH1
0.000123 0.000325
0.000986 0.000256


解答:由于注释中含有独立的数字串,且注释部分没有明显的格式,这时候用importdata, load等高级命令直接读取会失败,用 textread, dlmwrite 等格式化命令也不太合适,因此只能使用低级命令进行读取。(当然了,可以跳过注释部分直接用高级命令读取数据,即:[a b c d] = textread(filename,'%f %f %f %f','headerlines',4); )。一个简单的、非通用的包含注释的读取方法如下:
-------------------------------------
---------------------------------------------------------------------------------------

CODE:
clc;clear;
fid = fopen('exp.txt', 'r');
fid_n=fopen('ex.dat','w');
while ~feof(fid)
    tline=fgetl(fid);
    if ~isempty(tline)
        if double(tline(1))>=48 && double(tline(1))<=57  %
数值开始
            a=strread(tline);
            a(3:4)=[];
            fprintf(fid_n,'%f %f\n',a);
            clear a;
        elseif double(tline(1))==67   %
字母C开始
           [b1,b2,b3,b4]=strread(tline,'%s %s %s %s');
           b=[b1{1},'  ',b2{1}];
            fprintf(fid_n,'%s\n',b);
            clear b b1 b2 b3 b4;
        else
            fprintf(fid_n,'%s\n',tline);
        end
    else
        fprintf(fid_n,'%s\n',tline);
    end
end
fclose(fid);
fclose(fid_n);

---------------------------------------------------------------------------------

4. 注释(不含独立的数字串)+数据(列数相同):
源文件:

CODE:
你好 abc
欢迎来到 我们
振动论坛
vib.hit.edu.cn
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555

解答:直接用 importdata 便可

注:有时候注释中含有独立的数字串也可以 importdata 成功,不过得到的结果有可能不正确,建议这时候使用第3种情形的读取方式。

5. 注释与数据混排:
对此当然只能自己编程,举例:

源文件

CODE:
1 11 111 1111
你好
2 22 222 2222
欢迎来到
3 33 333 3333
振动论坛
4 44 444 4444
vib.hit.edu.cn
5 55 555 5555

解答:
--------------------------------------------
--------------------------------------

CODE:

function [data]=distilldata(infile)
%
功能说明:
%
将保存数据的原始文件中的数值数据读入到一个data变量中
%
使用说明:
% infile
——原始数据文件名;
% data=
数据变量

tmpfile='tmp2.mat';

fidin=fopen(infile,'r'); %
打开原始数据文件(.list

fidtmp=fopen(tmpfile,'w'); %
创建保存数据文件(不含说明文字)

while ~feof(fidin) %
判断是否为文件末尾
  tline=fgetl(fidin); %
从文件读入一行文本(不含回车键)
  if ~isempty(tline) %
判断是否空行
    [m,n]=size(tline);
    flag=1;
    for i=1:n %
判断一行中有没有字符(+-.Ee和空格键除外)
      if ~(tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...
          |tline(i)=='e'|tline(i)=='+'...
          |(double(tline(i))>=48&&double(tline(i))<=57))
        flag=0;
        break;
      end
    end
    if flag==1 %
如果是数字行,把此行数据写入文件
      fprintf(fidtmp,'%s\n',tline);
    end
  end
end

fclose(fidin);

fclose(fidtmp);

data=textread(tmpfile);

delete(tmpfile);

---------------------------------------------------------------------------------------------------------
另外,如果要求不高,也可以使用 textread 函数跳过注释部分进行读取,不过前提是需要事先知道文件内容的结构(即哪行是数据、哪行是注释)

6.各列数据的分离:
源文件:


CODE:
           0 +  47038.7   1.05  09:26:07  C
           2 +  46477.7   1.03  09:28:38  C  
           4 +  44865.7   1.04  09:28:48  C  
           6 +  41786.4   1.03  09:28:56  C  
           8 +  39896.0   0.97  09:29:03  C  
          10 +  37518.4   0.93  09:29:15  C  
          12 +  35858.5   0.92  09:29:30  C  
          14 +  46105.0   1.03  09:30:21  C  
          16 +  46168.6   6.89  09:30:30  C  
          18 +  48672.3   4.33  09:30:40  C  
          20 +  49565.7   0.49  09:30:48  C  
          22 +  49580.7   0.53  09:30:55  C  
          24 +  49602.3   0.84  09:31:03  C  
          26 +  49582.5   1.51  09:31:11  C  
          28 +  49577.0   1.39  09:31:19  C  
          30 +  49589.3   0.61  09:31:27  C  
          32 +  49578.3   1.06  09:31:29  C  
          34 +  49512.5   1.77  09:31:38  C 

解答:直接用 [a,b,c,d,e,f]=textread(yourfilename,'%d %c %f %f %s %c'); 便可

. 注意事项:

1. 请在 matlab 中保持当前路径在该数据文件对应的目录下进行存取,否则,存取时请给出该数据文件的具体路径。
2. 存取时,请给出该数据文件的全称(包括后缀名,读取mat文件时可省略)
3. load data.txtA=load(data.txt)的区别请参阅精华贴:
4. 请根据读写需要来打开文件,即根据你的需要来指定 fopen permission 属性为读或写。如果只用 a 进行写入,就不能用 fread 读取。此时应该写完关闭文件,然后用 r 打开读取,或者直接用 a+ 进行同时读写操作。否则,会产生莫名其妙的问题!以下代码是一个错误的例子:

CODE:

filename='e.dat';
fid=fopen(filename,'a');
if fid<0
    error('fopen error');
end
s=[1 2 3 4;5 6 7 8];
fwrite(fid,s,'float32')
[dd ll]=fread(fid,inf,'float32');
%把t中的数据全部读出,即s矩阵。
fclose(fid);
此时得到的dd, ll 是错误且无意义的!


. 其他相关问题:

1. 连续读取多个文件的数据,并存放在一个矩阵中:
(1)
首先是如何读取文件名:
方法一:
filename=dir(*.jpg);
那么第i个文件的文件名就可以表示为
filename(i).name
文件数量为:length(filename)

方法二:
先在Windows MSDOS(命令行)中使用以下命令生成一个list.txt文件:


dir path\folder /on /b /s > path\list.txt


举例:dir d:\test /on /b /s > d:\list.txt


然后在 matlab 中使用:


filename = textread(sFileFullName,'%s');


把所有文件名读取到list细胞矩阵中,最后对filename{i}便可得到各文件名。


(2) 然后是读取文件名的数据并存储:
假设每个文件对应的数据是m*n的,则:

CODE:
k = length(filename);

Data = zeros(m,n,k);

for ii = 1:k
  Data(:,:,ii) = yourreadstyle(filename{ii}); %yourreadstyle
是对应的文件读取方式的函数
end


2. 连续读取多个文件的数据,并存放在多个矩阵(以文件名命名)中:
假设每个文件对应的数据是m*n的,则以上述第二种文件名读取方法为例:

CODE:
k = length(filename);
for ii = 1:k
  D = yourreadstyle(filename{ii});
eval_r([
Data_, num2str(ii), = D;]);
end

3. 文件名命名问题:
文件名为 abc00001,abc00002,... abc00009,abc00010,... abc00099,abc00100,...abc00879.  准备把这些文件名给放到一个数组里面去。

解答:

CODE:
a=cell(879,1);
for k=1:879
     a{k} = sprintf('%.5d',k);
end

4. 上述各种文件格式、类型自动识别问题:可以利用正则表达式来处理,使之通用性较强。例如使用以下代码可以自动处理上面提到了例1到例5各种情形,不过由于存在自动判断,对某些例子(如例1)效率自然要低一点,而对于另外的例子(如例3、例5)效率估计要高一点(少用了一个循环)。

CODE:
function [data]=distilldata_eight(infile)
%
功能说明:
%
将保存数据的原始文件中的数值数据读入到一个data变量中(自动判断数据行)
%
使用说明:
% infile
——原始数据文件名;
% data=
数据变量

tmpfile='tmp2.mat';

fidin=fopen(infile,'r'); %
打开原始数据文件(.list

fidtmp=fopen(tmpfile,'w'); %
创建保存数据文件(不含说明文字)

while ~feof(fidin) %
判断是否为文件末尾
  tline=fgetl(fidin); %
从文件读入一行文本(不含回车键)
  if ~isempty(tline) %
判断是否空行
    str = '[^0-9 | \. | \- | \s | e | E]'; %
正则表达式为:该行中是否包含除 - . E e 数字  空白字符 外的其他字符
    start = regexp(tline,str, 'once');
    if isempty(start)
      fprintf(fidtmp,'%s\n',tline);
    end
  end
end

fclose(fidin);

fclose(fidtmp);

data=textread(tmpfile);

delete(tmpfile)


5. 大量数据的读取问题:
可以考虑使用循环分批读取(特别是在各数据是独立的时候),或者使用稀疏矩阵来实现。另外,也可参考《深入浅出MATLAB 7_X混合编程》一书第一章

6. 读取整个txt文件的内容(获得文件中的所有字符):

CODE:

f = fopen('yourfilename.txt','rt'); % t
属性根据需要可省略
x = fread(f,'*char');
fclose(f);


7. 把维数不同的矩阵及其变量名保存到一个 txt 文件中,例如 a1 = 123; a2 = [1 2 3;4 5 6] ,希望得到的 txt 文件如下:


QUOTE:

a1
123
a2

1 2 3
4 5 6
如果写入的时候简单一点,则可以采用以下方式,不过读取的时候比较麻烦:

CODE:

a1=123;
a2=[1 2 3;4 5 6];
fid = fopen('myfile.txt', 'wt');
for i=1:2
    fprintf(fid, '%s: \n %s\n', ['a',int2str(i)], mat2str(eval_r(['a',int2str(i)])));
end
fclose(fid);


相反,如果写入的时候复杂一点,则读取的时候会简单一点:

CODE:

a1=123;
a2=[1 2 3;4 5 6];
fid = fopen('myfile.txt', 'wt');
for i=1:2
    fprintf(fid, '%s: \n', ['a',int2str(i)]); 
    b = eval_r(['a',int2str(i)]);
    fprintf(fid, [repmat('%d ', 1, size(b,2)), '\n'], b');
end
fclose(fid);

 

转载于:https://www.cnblogs.com/AI-Algorithms/p/3669868.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典) 的相关文章

  • 根据select出来的数据进行update

    update t tbl desc set num 61 b num from t tbl desc a select distinct name as name count name num from t col desc group b
  • 细说Unicode(三) Unicode 番外之附加字符

    在各种论坛上 xff0c 经常会看到一些奇怪的字符 xff0c 它们的内容会超出显示范围 xff0c 举个例子 xff1a 39 Z A L G O 39 常见的还有一些有泰文字符组成的 这里就不举例子了 这些看似乱文的字符是怎么形成的呢
  • Linux 永久修改主机名(转载)

    Linux修改主机名 xff0c 永久生效 linux查看主机名 查看主机命令 xff1a root 64 linux epm2 hostname localhost localdomain localhost localdomain即为默
  • 安装centos7 报错[FAILED] Failed to start Switch Root. see 'systemctl status initrd-switch-root.service' ...

    背景 xff1a 在VMware上安装虚拟机 系统 xff1a CentOS 7 x86 64 Minimal 1804 目前最新的版本 报错截图 xff1a 在安装步骤就报错 xff0c 说明要么是硬件问题 xff0c 要么是系统文件有问
  • 微信聊天记录备份到电脑上还是不能看

    版权声明 xff1a 本文为 testcs dn 微wx笑 原创文章 xff0c 非商用自由转载 保持署名 注明出处 xff0c 谢谢 https blog csdn net testcs dn article details 801241
  • 四种滤波方式

    1 均值滤波 均值滤波 xff0c 是最简单的一种滤波操作 xff0c 输出图像的每一个像素是核窗口内输入图像对应像素的像素的平均值 所有像素加权系数相等 xff0c 其实说白了它就是归一化后的方框滤波 下面开始讲均值滤波的内容吧 均值滤波
  • python中文件处理--判断文件读取结束方法

    一 readline函数 按行遍历读取文件的方法 xff0c 通过这个方法 xff0c readline 每次只读取一行 xff0c 通常比 readlines 慢得多 仅当没有足够内存可以一次读取整个文件时 xff0c 才应该使用 rea
  • 4G模块网络通信

    硬件平台驱动安装AT指令调试 采用内部协议栈 ppp拨号上网 硬件平台 HUAWEI ME909s 821 Windows7操作系统 43 Ubuntu Kylin 14 04操作系统 嵌入式开发板 驱动安装 Windows系统下的模块驱动
  • 如何使用NSOperations和NSOperationQueues(二)

    34 每一个应用程序至少有一个主线程 线程的工作就是去执行一系列的指令 在Cocoa Touch中 xff0c 主线程包含应用程序的主运行回路 几乎所有你写的代码都会在主线程中执行 xff0c 除非你特别创建 34 线程 每一个应用程序至少
  • [转注自官网]Cocos2d-x Tutorial 5 - 碰撞检测(Glede Edition for 2.0.3)

    Chapter5 碰撞检测 主人公能够放子弹了 xff0c 虽然子弹看起来很美 xff0c 但是怎么样来打到妖怪 xff1f 在这一章我们介绍一下最简单的碰撞检测方法去实现它 首先第一个 xff0c 我们有必要保存每个妖怪和子弹的指针 xf
  • Access check table exist before drop it.

    If drop an un exist table will get error 34 Table 39 TempTable 39 does not exist 34 use the following function Here is a
  • 腾讯赵建春:AI浪潮下的高效运维思考及实践

    GOPS 全球运维大会暨首届金牌运维峰会于11月17日 18日在上海圆满举行 腾讯 SNG 助理总经理 GOPS 金牌讲师赵建春老师受邀出席大会 xff0c 并带来精彩演讲 AI 浪潮下的高效运维思考与实践 本文根据此演讲实录整理而成 AI
  • 虚拟机开机连接的时候显示novnc_Linux-KVM虚拟化+websockify(noVNC)

    kvm安装 环境 xff1a centos7 1 查看CPU是否支持inter或AMD的虚拟技术 cat proc cpuinfo grep E 34 vmx svm 34 支持显示 2 安装kvm yum install qemu kvm
  • 云计算部署与管理----Openstack(一)

    一 云计算介绍 基于互联网的相关服务的增加 使用和交付模式 xff1b 这种模式提供可用的 便捷的 按需的网络访问 进入可配置的计算资源共享池 资源包括网络 服务器 存储 应用软件 服务 xff1b 这些资源能够被快速提供 只需投入很少的管
  • 嵌入式软件工程师需要哪些知识

    最近想不到好的专题 xff0c 所以与大家一起聊聊 xff0c 在我眼中 xff0c 一名优秀的嵌入式软件工程师需要具备哪些能力 嵌入式软件工程师需要哪些知识 基本职业技能 编码能力 xff1a 至少精通C C 43 43 语言进行codi
  • Docker 更新镜像

    docker镜像如下 xff1a 今天在运行的容器内使用 apt get update 命令进行更新时 xff0c 发下很多404错误 1 Err http archive ubuntu com wily updates restricte
  • 普通用户crontab -e报错

    root crontab e 34 crontab u5u4Zm crontab 34 34L 1478C written crontab installing new crontab var spool cron mkstemp Perm
  • 读书笔记之《Windows内核原理与实现》

    最近学习 Windows内核原理与实现 发现其博大精深 xff0c 粗略过了一遍 xff0c 很多东西比较茫然 xff0c 看书之余把书中涉及的函数 xff0c 结构 xff0c 全局变量的所在页数总结出来 xff0c 便于以后查阅 由于半
  • 使用者——初见Pixhawk

    是什么 Pixhawk简单介绍 直接使用二次开发 Pixhawk总体概述怎么用 Pixhawk初次使用 搭建调试环境初始化配置测试试飞调整参数提高性能 xff08 是什么 Pixhawk简单介绍 PixHawk是著名飞控厂商3DR推出的新一
  • Kazam 1.3.99 发布,Python 3端口和BUG修复

    Kazam 是一款linux上的简洁并且功能强大的桌面录制工具 xff0c 喜欢录屏的童鞋可以尝试下安装改软件 您也可以选择录制声音的支持和pulseaudio的任何声音设备输入 xff0c 记录任何VP8 WebM视频格式的视频 添加 P

随机推荐

  • XCOM串口助手打印不出数据

    本次实验是在基于原子的战舰开发板上的做定时器捕获实验 xff0c 程序源码下载到板子上运行正常 指示灯正常显示 xff0c 打开XCOM识别不来串口 xff0c 原因 xff1a 硬件上没有插USB转串口线 xff1b 连接上USB转串口线
  • Android+GPS轨迹跟踪器(一)

    Android 43 GPS轨迹跟踪器 今天的第一步 xff1a 获取Key 使用高德地图 xff0c 查看高德官方API xff1a http lbs amap com 使用Android studio做开发平台 xff08 我还纠结了Q
  • sdformatter格式化选项设置_SD卡低级格式化方法演示,需要用到SDFormatter

    相信很多用户在使用手机的时候都会遇到过sd内存卡无法被识别的情况 而遇到这一情况是无法通过一般的方法来修复的 xff0c 所以 xff0c 一般都会使用sdformatter对其进行低级格式化 可是 xff0c 对于没有接触过sdforma
  • 自己用树莓派做了一个电视盒子,还可以看优酷和cctv

    我刚接触树莓派时间不久 xff0c 安装过raspberry xff08 树莓派官方系统 xff09 xff0c ubuntu mate xff0c openelec等系统 xff0c openelec是一个电视盒子系统 xff0c 但是我
  • 关闭和开启USB功能

    关闭和开启USB功能 一 xff0c 开启USB功能 USB Enable 64 echo off step1 if exist C Windows INF usbstor inf cls amp goto step2 else cls a
  • 地面站进行航迹规划任务设置

    地面站 xff1a Qgound Control MissionPlayUAV gt 3 2版本 飞控 xff1a Pixhawk 连接 xff1a 数传连接 TCP UDP网络连接 设定任务 APM Pixhawk地面站航迹规划指令单 C
  • 偏差(Bias)和方差(Variance)——机器学习中的模型选择

    模型性能的度量 在监督学习中 xff0c 已知样本 x 1 y 1 x 2 y 2 x n y n xff0c 要求拟合出一个模型 xff08 函数 xff09 hat f xff0c 其预测值 hat f x 与样本实际值 y 的误差最小
  • linux/debian/ubuntu/下can't open XXX.sh

    linux debian ubuntu下执行某 sh出现了 Can 39 t open xxx sh 执行 chmod 777 xxx sh 转载于 https www cnblogs com light zhang p 8417333 h
  • 1、智能盆栽初步了解

    第一个 xff1a 最好养的植物 Click and Grow智能盆栽 2014年03月14 http www pcpop com doc 0 991 991784 shtml 对于现在的人来说 xff0c 家里种个花啊 xff01 种个草
  • Linux下添加静态路由表设置网关出现SIOCADDRT: Network is unreachable的问题分析

    场景 xff1a route add default gw 192 168 4 1 route SIOCADDRT Network is unreachable 解释 xff1a 1 先ping一下网关 xff0c 但是ping的通不代表一
  • spring4笔记----报错publicid systemid之间要有空格的解决方法

    lt xml version 61 34 1 0 34 encoding 61 34 GBK 34 gt lt beans xmlns xsi 61 34 http www w3 org 2001 XMLSchema instance 34
  • 深入理解Redis的scan命令

    熟悉Redis的人都知道 xff0c 它是单线程的 因此在使用一些时间复杂度为O N 的命令时要非常谨慎 可能一不小心就会阻塞进程 xff0c 导致Redis出现卡顿 有时 xff0c 我们需要针对符合条件的一部分命令进行操作 xff0c
  • react中key的作用

    背景 xff1a 如果为父节点添加多个相同的子节点时 xff0c 不添加key属性 xff0c 会报错但同时也会渲染出dom xff0c 渲染出dom其实是证明能从差异对象中渲染出真实dom xff0c 但报错的原因是因为这种写法会影响渲染
  • redis-cluster集群模式下使用pipeline,mget,mset批量操作

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 前言 xff1a Redis在3 0版正式引入了集群这个特性 xff0c 扩展变得非常简单 然而当你开心的升级到3 0后 xff0c 却发现有些很好用的功能现在工作不了了
  • MacOS任意降级(完美教程)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 有道是前人栽树后人乘凉 通过搜索引擎各种查阅关于Mac系统的降级方法 愚钝的笔者终于成功降级 xff08 其实大部分时间都浪费在下载 xff0c 哭 xff09 虽费了一番
  • 人工智能让生活更美好

    人 I 工 I 智 I 能 I到 I来 科 I技 I大 I门 打 I 开 提起人工智能 你会想到什么 阿尔法围棋 浪潮天梭象棋 甚至会想到 大白 吧啦啦啦 史密斯电影 我 机器人 科技一直推动社会的变化 技术的飞速更迭与人类移动网络化的行为
  • Pixhawk飞行模式的讨论

    手动模式 offboard 地面站 操控的区别 使用遥控操纵的模式 Simple and Super Simple 选项 加了这个选项之后 xff0c 它的磁力计会记录飞机解锁时 xff0c 朝向就是无人机的前方 每个飞行模式的旁边都有一个
  • 抖音橱窗怎么添加自己的商品?抖音橱窗上架商品教程

    抖音商品橱窗功能一出来就受到了大家的喜爱 xff0c 能在娱乐的同时增加收入是件双赢的事 今天小蕙 xff08 renzheng234 xff09 教大家在抖音商品橱窗如何添加自己店铺的商品 xff1f 首先我们要明白 xff1a 商品橱窗
  • 新款 2018款macbook Pro 装双系统教程

    首个阅读量将破万的文章 xff0c 感谢支持 防止无良爬虫 xff0c 开头附上原文链接 xff1a http www cnblogs com xueyudlut p 7498115 html 分割线 苹果笔记本的确高大上 xff0c 外观
  • MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)

    振 动论坛原版主eight 的经典贴 http www chinavib com thread 45622 1 1 html MATLAB 对于文本文件 txt 进行数据读取的技巧总结 经典中的经典 由于本帖内容较多 xff0c 部分转自他