读写bin和xml文件
在这个例子中,我们将比较在Engee和MATLAB中读取bin和xml格式的文件。
让我们从二进制文件(bin)开始。 它们包含一个原始数据结构,这使得它们很难在没有特殊工具的情况下解释。 这些文件由一个字节流组成,可以表示任何数据,无论是文本,图像,音频还是视频。 这些数据以二进制形式存储,这需要进行特殊处理以提取必要的信息。
使用二进制文件的主要特点如下。
- 数据格式:在二进制文件中,数据由字节序列表示,其中每个字节存储一个信息单元。
- 数据解释:理解二进制文件的内容需要了解其内部结构。 如果不了解数据结构,程序将无法正确解释文件。
- 通过读取和写入单个字节或字节块来访问数据。 程序必须知道解释器将如何处理这些数据。
让我们创建一个二进制文件进行读取。
In [ ]:
Pkg.add(["EzXML"])
In [ ]:
open("file.bin", "w") do io
write(io, Int32(12)) # Запишем целое число типа Int32
write(io, Float64(3.14)) # Запишем вещественное число типа Float64
write(io, "Test\n") # Запишем строку
end
Out[0]:
在Engee中读取二进制文件:
In [ ]:
open("file.bin", "r") do io
num_int = read(io, Int32) # Считаем целое число типа Int32
num_float = read(io, Float64) # Считаем вещественное число типа Float64
str = String(read(io)) # Считаем оставшуюся часть файла как строку
println("Целое число: ", num_int)
println("Вещественное число: ", num_float)
print("Прочитанная строка: ", str)
end
在MATLAB中读取二进制文件:
In [ ]:
using MATLAB
mat"""
fileID = fopen('file.bin', 'rb');
num_int = fread(fileID, 1, 'int32');
num_float = fread(fileID, 1, 'double');
str = fscanf(fileID, '%c');
fclose(fileID);
"""
Out[0]:
In [ ]:
mat"""fprintf('Прочитанные целые числа: ');
disp(num_int);"""
In [ ]:
mat"""fprintf('Прочитанные вещественные числа: ');
disp(num_float);"""
In [ ]:
mat"""disp(['Прочитанная строка: ', str]);"""
虽然测试表明代码原来是相同的类型,但两种语言之间的差异表现在Engee的语法更简单,更直观。 此外,Engee中的数据类型更容易理解,因为没有"double"的概念。
现在让我们继续讨论XML文件(xml)。 它们旨在以树的形式存储结构化数据。 XML文件的每个元素都有自己的标记,该标记定义此元素中包含的数据类型。 这使得处理这些文件变得更加容易,因为程序可以分析文件结构并提取必要的数据。
使用XML文件的主要功能如下。
- 数据结构:XML文件是一个树,其中每个元素(标记)包含有关数据类型和结构的信息。
- 分层结构:XML文件以树结构组织数据,其中每个元素都有父元素和后代元素。
- 标记:XML文件包含定义数据组织方式的标记。 这简化了数据处理,程序知道如何处理每个元素。
读取此类文件的最简单方法是使用小写表示。 对于此类文件的详细分析,Engee具有EzXML库。 而MATLAB使用Java API来处理XML,因为没有内置的工具。
In [ ]:
Pkg.add("EzXML")
using EzXML
In [ ]:
using EzXML
doc = parsexml("""
<primates>
<genus name="Homo">
<species name="sapiens">Human</species>
</genus>
<genus name="Pan">
<species name="paniscus">Bonobo</species>
<species name="troglodytes">Chimpanzee</species>
</genus>
</primates>
""")
# Сохраняем документ в файл
write("file.xml", doc)
Out[0]:
在Engee中读取XML文件:
In [ ]:
open("file.xml", "r") do io
str = String(read(io))
println(str)
end
在MATLAB中读取XML文件:
In [ ]:
mat"""
fileID = fopen('file.xml', 'rb');
disp(fscanf(fileID, '%c'));
"""
结论
在这个例子中,我们研究了二进制文件和XML文档是如何用两种编程语言编写和读取的。 从这个分析中可以看出,这个方向的句法和功能优势都在Engee的一边。