Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中文件查找的简单问题_C_File Io_File - Fatal编程技术网

C语言中文件查找的简单问题

C语言中文件查找的简单问题,c,file-io,file,C,File Io,File,假设我写在一个文件里 Mesh: 1 Vertices: 345 Indices: 123 V: 1,3,4 1,4,5 .. Mesh: 2 Vertices: 456 Indices: 42 etc. 我如何在任何职位上寻找工作?例如,我想转到网格2的顶点或网格3的顶点等 处理这些事情的正确方法是什么?您通常会使用二进制格式。一种方法是在文件中分配一定数量的空间作为头。在这里,将网格数、顶点和索引计数以及偏移量放入顶点数据开始的文件中。加载文件时读取

假设我写在一个文件里

Mesh: 1
    Vertices: 345
    Indices: 123
    V: 1,3,4 1,4,5 ..
Mesh: 2
    Vertices: 456
    Indices: 42
etc.
我如何在任何职位上寻找工作?例如,我想转到网格2的顶点或网格3的顶点等


处理这些事情的正确方法是什么?

您通常会使用二进制格式。一种方法是在文件中分配一定数量的空间作为头。在这里,将网格数、顶点和索引计数以及偏移量放入顶点数据开始的文件中。加载文件时读取标题,然后寻找适当的位置读取所需的数据。

通常使用二进制格式。一种方法是在文件中分配一定数量的空间作为头。在这里,将网格数、顶点和索引计数以及偏移量放入顶点数据开始的文件中。加载文件时读取标题,然后寻找适当的位置读取所需的数据。

打开文件进行读取,并读取一行,直到到达文件末尾(EOF)。对于每个读取行,检查该行是否与查询匹配。如果匹配,报告并返回。否则,请转到下一行


主要的认知工作是检查匹配。有一个定义良好的格式,可以轻松解析行的可解析格式,使您的工作更轻松。

打开文件进行读取,并读取一行,直到到达文件末尾(EOF)。对于每个读取行,检查该行是否与查询匹配。如果匹配,报告并返回。否则,请转到下一行


主要的认知工作是检查匹配。有一个定义良好的格式,可以轻松解析行的可解析格式,使您的工作更轻松。

文本文件格式中没有有效的随机搜索方法。这是因为如果不读取之前的所有内容,就无法知道文件中的正确偏移量。处理这些问题的唯一方法是从头到尾按顺序进行

因此,读取整个文件并将其解析为内存中的某个数据结构。然后根据需要使用此结构而不是文件


如果文件太大,无法将所有内容都保存在内存中(目前这种情况极不可能发生),请在不将所有内容存储在内存中的情况下通读文件-而只将文件偏移量存储到数组中每个
网格的开头。然后你可以很容易地找到正确的位置。

在文本文件格式中没有有效的随机搜索方法。这是因为如果不读取之前的所有内容,就无法知道文件中的正确偏移量。处理这些问题的唯一方法是从头到尾按顺序进行

因此,读取整个文件并将其解析为内存中的某个数据结构。然后根据需要使用此结构而不是文件


如果文件太大,无法将所有内容都保存在内存中(目前这种情况极不可能发生),请在不将所有内容存储在内存中的情况下通读文件-而只将文件偏移量存储到数组中每个
网格的开头。然后你可以很容易地找到正确的位置。

正如其他答案所指出的,C只能在文件中寻找字节偏移量


但是,如果“网格”对象始终以数字顺序存储在文件中,则不必按顺序读取整个文件来查找要查找的网格。您可以改为对文件执行二进制搜索-无论何时查找文件中的某个位置,都要向前扫描以查找下一个
网格

,正如其他答案所指出的,C只能查找文件中的字节偏移量


但是,如果“网格”对象始终以数字顺序存储在文件中,则不必按顺序读取整个文件来查找要查找的网格。您可以改为对文件执行二进制搜索-无论何时查找文件中的某个位置,都可以向前扫描以查找下一个
网格

此。如果您不知道在哪里可以找到某个点,那么无法直接查找该点,而C只知道字节偏移量,而不知道数据的结构。如果您想保留文本格式,并且实际上需要在文件中查找,而不是简单地将其加载到内存中并在内存中处理,那么您必须首先解析文件并计算偏移量。一般来说,首选文本。请参阅,了解文本的重要性,这个问题似乎非常适合纯文本格式。那么,为什么要使用二进制格式呢?@ArunSaha-来自您的链接:“二进制协议的唯一合理理由是,如果您要处理足够大的数据集……大型图像和多媒体格式有时就是一个例子……”我本人并不同意该链接中的许多内容——XML是文本的,本质上支持一种向后兼容性,但对人类来说根本不健康。这一点很好。XML是一种奇特的野兽,它将文本格式的缺点与二进制格式的缺点结合起来。有时我想知道为什么有人会用它…这个。如果您不知道在哪里可以找到某个点,那么无法直接查找该点,而C只知道字节偏移量,而不知道数据的结构。如果您想保留文本格式,并且实际上需要在文件中查找,而不是简单地将其加载到内存中并在内存中处理,那么您必须首先解析文件并计算偏移量。一般来说,首选文本。请参阅,了解文本的重要性,这个问题似乎非常适合纯文本格式。那么,为什么要使用二进制格式呢?@ArunSaha-来自您的链接:“二进制协议的唯一合理理由是,如果您要处理足够大的数据集……大型图像和多媒体格式有时就是一个例子……”我本人并不同意该链接中的许多内容——XML是文本的,本质上支持一种向后兼容性,但对人类来说根本不健康。这一点很好。XML是一种奇特的野兽,它设法将文本格式的缺点与缺点结合起来