gpt4 book ai didi

Delphi 二进制/文本文件必要性

转载 作者:行者123 更新时间:2023-12-02 14:37:28 28 4
gpt4 key购买 nike

我是一名工程师,而不是软件程序员,所以请原谅我的无知。

我编写了一个 Delphi(7SE) 程序,用于从连接到两个数字温度计的 USB 端口读取“真实”数据类型。

我已经完成了该计划的大部分内容。

我尚未完成的内容解释如下:

我希望将此“真实”数据保存到二进制文件中。文本文件也可以,但我担心拥有大数据文件。

我还希望从二进制/文本文件读回此数据,以便使用我的 Delphi 应用程序显示数据。

我认为这不会太难。我目前以 .CSV 格式保存数据。

这里的不同之处在于,二进制文件应该包含来 self 的应用程序用户发起的不同 session 的数据。

因此,当我单击一个名为“历史”数据的按钮时,会弹出一个新窗口/表单,其中显示我之前开始和停止的不同 session 时间。然后将选择一个 session 并检索数据以进行显示。

这可以在一个二进制文件中完成吗?还是必须使用 2 个文件:一个用于“真实”数据,另一个用于索引不同的 session 时间?

我对这种保存二进制数据的方式的要求是,我不必不断输入文件名,从而跟踪许多数据文件。

例如,thermo.hst(历史数据)和thermo.idx(索引文件)文件将包含所有信息,例如实际临时数据、读取数据的时间、 session 开始和结束时间等。

任何有用的指针和希望包含尽可能详细的代码将不胜感激。

最佳答案

我希望这个示例代码还不算太晚,无法提供帮助。

(我已将其添加为我的另一个答案,以便我可以清晰地列出代码。如果这篇文章或我之前的文章回答了您的问题,请单击答案图标,以便我获得声誉积分!)

下面是一些粗略的代码,展示了如何读取 ini 文件中的各个部分并找到最大的文件名。我确认它可以编译并且似乎返回有效值,但您需要确认它满足您的需要。更多的是向您展示想法...

请注意,如果您的数据文件名有扩展名,您将需要在我的示例代码中添加代码来删除扩展名,方法如下:FileName := ChangeFileExt(Filename, '')。

  // Call with an open inifile.  Returns the name of the next filename, or '' if trouble
Function GetNextFileName( const IniFile: TInifile):String;
const
BASE_FILENAME = 'File.'; // sections in the ini file will be [File.1], [File.2], ... [File.100], etc.
var
Sections: TStringList;
NumericPartAsString: String;
NumericPartAsInteger: Integer;
ListIndex: Integer;
LargestFileNumberSeenSoFar: Integer;
begin
Result := '';
Sections := TStringList.Create;
IniFile.ReadSections(Sections); // fills StringList with the names of all sections in the ini file
if( Sections.Count = 0) then
Result := BASE_FILENAME + '1'
else
begin // find largest extension
LargestFileNumberSeenSoFar := -1;
ListIndex := 0;
while ListIndex <= (Sections.Count - 1) do // for every string (which is also a filename) in the string list:
begin
NumericPartAsString := StringReplace(Sections.Strings[ListIndex], BASE_FILENAME, '', []); // remove base filename
if (NumericPartAsString <> '') then
begin
NumericPartAsInteger := StrToIntDef(NumericPartAsString, -1);
if (NumericPartAsInteger > LargestFileNumberSeenSoFar) then
LargestFileNumberSeenSoFar := NumericPartAsInteger;
end;
inc(ListIndex);
end;
if (LargestFileNumberSeenSoFar > -1) then
Result := BASE_FILENAME + IntToStr(LargestFileNumberSeenSoFar + 1);
end;
Sections.Free;
end; { GetNextFileName }

procedure TForm1.Button1Click(Sender: TObject);
var
IniFile: TInifile;
NewFileName: String;
begin
IniFile := TInifile.Create('c:\junk\ini.ini');
NewFileName := GetNextFileName(Inifile);
if (NewFileName = '') then
ShowMessage('Error finding new filename')
else
ShowMessage('New filename is ' + NewFileName);
IniFile.Free;
end;

关于Delphi 二进制/文本文件必要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3043861/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com