我在读取 Windows NT 4.0 dll 文件中的 txt 文件时遇到问题;在您问之前,我目前对将其迁移到新操作系统不感兴趣。我只想解决这个问题,让我之后的其他人担心迁移这个超级遗留软件。
使用fscanf读取txt文件时出现问题,如图:
infile_ptr = fopen("c:\\LumaGem\\orbit.txt", "r");
byteoffset=0;
while(!feof(infile_ptr) )
{
r=0.0; s1=0.0; s2=0.0; e1=0.0; e2=0.0; e3=0.0; d=0.0; f=0.0;
fseek(infile_ptr, byteoffset, SEEK_SET);
fscanf(infile_ptr,"%7lf %7lf %7lf %7lf %7lf %7lf %7lf %7lf", &r, &s1, &s2, &e1, &e2, &e3, &d, &f);
byteoffset=0; byteoffset = ftell(infile_ptr);
}
fclose(infile_ptr);
使用 MATLAB 创建的 txt 文件由 128 行、每列 8 列组成,由 5 个空格分隔,并且在 MATLAB 中的格式如下:
fprintf(fid,'%7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f \n', variables);
这段代码不是我写的,工作了好几年。然而,最近我们不得不重建/重新安装 Windows NT 4.0 操作系统和软件,现在我得到一个奇怪的错误。该程序使用顶部提供的代码很好地读取 txt 文件,直到它到达第 123 行,此时它读取第 8 列两次,导致所有后续变量移动一个位置,完全搞砸了最后一个程序的几行。有趣的是,这个问题可以通过手动将前 123 行批量复制并粘贴到一个新的 txt 文件中,然后将最后几行一个接一个地粘贴到同一个新的 txt 文件中并将其用作输入(复制完成在写字板内的 NT 机器上)。这样做可以消除这种双重阅读问题。我不知道什么问题会导致这个错误,但也让它通过这种奇怪/笨拙的方法来修复。新旧输入都会出现问题,所以我认为输入文件不是问题,因为它们没有改变。
哦,另外,如果我更改 txt 文件中每列之间的空格数,错误的位置会发生变化。将其减少到 1 个空格会导致错误发生在第 120 行左右,而增加空格数(尝试 7 个而不是 5 个)会将错误推低到第 124 行。
我不是编程专家(一直是按需学习的人),因此非常感谢您帮助解决这个问题。谢谢!