Engee 文档
Notebook

读写 binxml 文件

在本例中,我们将比较在 EngeeMATLAB 中读取 binxml 文件的情况。

让我们从二进制文件(bin)开始。二进制文件包含原始的数据结构,因此如果没有特殊工具,很难对其进行解释。这类文件由字节流组成,可以代表任何数据,无论是文本、图像、音频还是视频。这些数据以二进制形式存储,需要经过特殊处理才能提取所需的信息。

处理二进制文件的主要特点如下。 1.数据格式:在二进制文件中,数据以字节序列表示,每个字节存储一个信息单位。 2.数据解释:要理解二进制文件的内容,需要了解其内部结构。如果不了解数据结构,程序就无法正确解释文件。 3.通过读写单个字节或字节块来访问数据。程序必须知道解释器将如何处理这些数据。

让我们创建一个用于读取的二进制文件。

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]:
5

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
Целое число: 12
Вещественное число: 3.14
Прочитанная строка: Test

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]:
0.0
In [ ]:
mat"""fprintf('Прочитанные целые числа: ');
disp(num_int);"""
>> >> >> Прочитанные целые числа: >>     12

In [ ]:
mat"""fprintf('Прочитанные вещественные числа: ');
disp(num_float);"""
>> >> >> Прочитанные вещественные числа: >>     3.1400

In [ ]:
mat"""disp(['Прочитанная строка: ', str]);"""
>> >> >> Прочитанная строка: Test

尽管测试结果表明代码是相似的,但两种语言之间的差异是显而易见的,Engee 的语法更简单、更直观。此外,Engee 中的数据类型更容易理解,因为没有 "double "的概念。

现在我们来看看 XML 文件 (xml)。它们旨在以树形结构存储结构化数据。XML 文件的每个元素都有自己的标签,标签定义了该元素所包含的数据类型。这使得处理此类文件更加容易,因为程序可以分析文件结构并检索所需的数据。

使用 XML 文件的主要特点如下。 1.数据结构:XML 文件是一个树形结构,其中每个元素(标签)都包含有关数据类型和结构的信息。 2.层次结构:XML 文件以树形结构组织数据,其中每个元素都有父元素和子元素。 3.标记:XML 文件包含定义数据组织方式的标记。这使得数据更容易处理,程序也知道如何处理每个元素。

读取此类文件最简单的方法是使用字符串表示法。要详细分析此类文件,EngeeEzXML库。由于没有内置工具,MATLAB使用Java API来处理XML。

In [ ]:
Pkg.add("EzXML")
using EzXML
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
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]:
290

Engee 中读取 XML 文件:

In [ ]:
open("file.xml", "r") do io
    str = String(read(io))
    println(str)
end
<?xml version="1.0" encoding="UTF-8"?>
<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>

MATLAB 中读取 XML 文件

In [ ]:
mat"""
fileID = fopen('file.xml', 'rb');
disp(fscanf(fileID, '%c'));
"""
>> >> >> >> <?xml version="1.0" encoding="UTF-8"?>
<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>

结论

在本例中,我们研究了两种编程语言如何编写和读取二进制文件和 XML 文档。从解析过程中我们可以看出,语法和功能方面的优势都在Engee一方。