我编写了一个Delphi函数,将.dat文件中的数据加载到字符串列表中.然后它解码字符串列表并分配给字符串变量.字符串的内容使用'#'符号作为分隔符.
然后,我如何获取此字符串的内容,然后将其内容分配给局部变量?
// Function loads data from a dat file and assigns to a String List.
function TfrmMain.LoadFromFile;
var
index, Count : integer;
profileFile, DecodedString : string;
begin
// Open a file and assign to a local variable.
OpenDialog1.Execute;
profileFile := OpenDialog1.FileName;
if profileFile = '' then
exit;
profileList := TStringList.Create;
profileList.LoadFromFile(profileFile);
for index := 0 to profileList.Count - 1 do
begin
Line := '';
Line := profileList[Index];
end;
end;
Run Code Online (Sandbox Code Playgroud)
在解码后,var"Line"包含如下所示的内容:
例:
Line '23#80#10#2#1#...255#'.
Run Code Online (Sandbox Code Playgroud)
并非所有分隔符之间的值都是相同的长度,并且每次调用函数LoadFromFile时"Line"的值都会变化(例如,有时一个值可能只有一个数字,接下来的两个或三个等等,所以我不能依赖于复制字符串或数组的函数).
我试图找出循环"Line"内容的方法,将其分配给名为"buffer"的局部变量,然后如果遇到'#'则将缓冲区的值赋给局部变量,将缓冲区重新初始化为''; 然后移动到"Line"中的下一个值,重复下一个参数的过程,每次忽略'#'.
我想我现在已经解决了这个问题太久了,我似乎无法取得任何进展,需要休息一下.如果有人愿意看一看,我欢迎任何关于如何实现这一目标的建议.
非常感谢
KD
我有一个存储指向某些对象的指针的数组,我想知道如果你只有一个指针,是否可以释放一个对象.例如:
var test_form :Tform;
p: Pointer;
vartest := Tform.create(nil);
p:=@vartest;
Run Code Online (Sandbox Code Playgroud)
如果在运行时我只有p 可以释放vartest吗?
我尝试将一些代码从D2007移植到DXE2.这个简化的代码在D2007中编译得很好.在DXE2中显示此错误:
[DCC Warning] Unit1.pas(10): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'AnsiChar' and 'Char'
Run Code Online (Sandbox Code Playgroud)
可能是一个unicode问题.有人能告诉我为什么会发生这种情况以及我该如何纠正它?
问候
代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TSetOfChar = Set of Char; // Line 10
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FCharacterSet: TSetOfChar;
public
property CharacterSet: TSetOfChar read FCharacterSet write FCharacterSet;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: …Run Code Online (Sandbox Code Playgroud) 我有带字段的Firebird数据库表(FK - ForeignKey字段):
ID integer,
FACILITY_ID integer, --FK
SERVICE_ID integer, --FK
PROVIDER_ID integer, --FK
SELLER_ID integer, --FK
TARIFF_GROUP_ID integer, --FK
DATE_START date,
N_NORMATIVE_VALUE numeric(15,2),
N_METER_VALUE numeric(15,2),
T_NORMATIVE_VALUE numeric(15,2),
T_METER_VALUE numeric(15,2),
IS_ACTIVE smallint
Run Code Online (Sandbox Code Playgroud)
我想将这个表加载到内存中并在我的Delphi程序中使用它(readonly).我必须搜索所有FK的记录(......其中FACILITY_ID =:FACILITY_ID和SERVICE_ID =:SERVICE_ID等...)
什么是该任务的最佳容器:动态数组或列表或其他什么?以及如何实现此搜索?哈希可能吗?
它不是非常大的表(1000条记录),但将在FOR构造中使用超过100000次迭代.
我正在使用带有IBX和UIB和FB25的Delphi XE2
是否可以使用Delphi XE2或XE3为Windows 8平板电脑和手机开发应用程序?我认为XE3 ust支持UI.我不确定我们是否可以使用Delphi为Win8平板电脑创建应用程序.我已经阅读过我们需要在Visual Studio中使用Prism XE3的地方.我不想因此而购买/升级到XE3.我相信即使使用XE2我们也可以开发但不确定.
另外,有人知道微软是否接受用Delphi编写的appstore应用程序?
谢谢.
-K
这有点令人困惑,但会尽力解释它.请询问您是否需要更多详细信息.
首先,我有一个叫做TPlayersLike 的课程.
TPlayers = class
Private
p : array[1..20] of TStringList;
function GetPlayer(i:integer): TStringList;
Public
Property player[i : integer] : TStringList read GetPlayer;
constructor Create; virtual;
implementation
uses
main;
{constructor}
constructor TPlayers.Create;
begin
p[1] := TStringList.Create;
p[2] := TStringList.Create;
p[3] := TStringList.Create;
p[4] := TStringList.Create;
p[5] := TStringList.Create;
p[6] := TStringList.Create;
end;
function TPlayers.GetPlayer(i: integer): TStringList;
begin
Result := p[i];
end;
Run Code Online (Sandbox Code Playgroud)
我现在必须FTherePlayers := TPlayers.Create创建这个类.我第一次像这样添加到stringlist
FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x));
Run Code Online (Sandbox Code Playgroud)
或者取出变量
FTherePlayers.Player[1].Add('posx=15');
Run Code Online (Sandbox Code Playgroud)
这似乎没问题,但接下来我尝试更新它
FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;
Run Code Online (Sandbox Code Playgroud)
或者取出变量
FTherePlayers.Player[1].Values['posx='] := 12; …Run Code Online (Sandbox Code Playgroud) 我通过序列化和对Delphi的表单及其内容的反序列化编写了以下代码
unit SerAndDeser;
interface
uses Classes,MainForm,ListOfTables,DataOfTable,SerialForms,sysutils,ActiveX, DatabaseClasses, UnloadProcs;
procedure Ser();
procedure Deser();
function GetGUID(): string;
function DeleteSymbols(inputstr : string) : string;
implementation
function GetGUID(): string;
var
GUID : TGUID;
begin
Result := '';
if CoCreateGuid(GUID) = 0 then
Result := GUIDToString(GUID);
Result := StringReplace(Result, '{', '', []);
Result := StringReplace(Result, '}', '', []);
Result := StringReplace(Result, '-', '', [rfReplaceAll]);
end;
function DeleteSymbols(inputstr : string): string;
begin
Result := '';
Result := StringReplace(inputstr, '-', '', [rfReplaceAll]);
Result := StringReplace(Result, ' ', …Run Code Online (Sandbox Code Playgroud) 我有一个adoQuery,并希望用结果填充列表框,但没有重复.
with Fdeptlayout.ADOQuery2 do
begin
sql.Clear;
sql.BeginUpdate;
sql.Add('SELECT');
sql.Add(' *');
sql.Add('FROM');
sql.Add(' `MList`');
sql.Add(' ORDER BY `Basic Name`');
sql.EndUpdate;
open;
end;
while not fdeptlayout.ADOquery2.EOF do
fdeptlayout.ListBox1.Items.Add(fdeptlayout.ADOQuery2['Basic Name']);
end;
Run Code Online (Sandbox Code Playgroud)
目前,这会向列表框中添加350个项目,其中包含大量重复项.这太多了.如何更改查询以从结果中删除重复项?:(任何帮助都会很棒!
如何使用未过滤和多选择的opendialog加载到listview只有.mp3文件?我正在使用这种方法:
procedure TForm1.PlayClick(Sender: TObject);
var i:integer;
begin
if opendialog1.execute then
begin
if ExtractFileExt(opendialog1.FileName[i]) ='.mp3' then
begin
for I := 0 to opendialog1.files.Count - 1 do
begin
listview1.Items.Add.Caption:=extractfilename(opendialog1.Files[i]);
end;
end;
end else
begin
showmessage(opendialog1.Files[i]);
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是我需要一个像这样工作的程序:
如果用户打开具有各种扩展名的文件夹,则opendialog仅添加到扩展名为.mp3的ListView文件.我需要一个不使用过滤器的过程.谢谢!
我收到一个错误:
[DCC错误] Test.pas(10):E2291缺少接口方法ICoTest64.MyFunc的实现
以下是TLB文件的片段.
// *********************************************************************//
// Interface: ICoTest64
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {76CF78FE-22A3-4C0B-B1A9-97634A453AE3}
// *********************************************************************//
ICoTest64 = interface(IDispatch)
['{76CF78FE-22A3-4C0B-B1A9-97634A453AE3}']
function MyFunc(const Range: System.OleVariant): System.OleVariant; safecall;
end;
Run Code Online (Sandbox Code Playgroud)
这是实施
unit Test;
interface
uses
SysUtils, ComObj, ComServ, ActiveX, Variants, Office2000, Excel2000,
adxAddIn, Test64_TLB,
System.Classes, adxHostAppEvents, Dialogs, StdVcl;
type
TCoTest64 = class(TadxAddin, ICoTest64)
protected
function MyFunc(var Range: System.OleVariant): System.OleVariant; safecall;
end;
implementation
function TCoTest64.MyFunc(var Range: System.OleVariant): System.OleVariant;
begin
Result:= 10;
end;
end.
Run Code Online (Sandbox Code Playgroud)
据我所知 implementation = interface
我正在使用Delphi XE2
怎么了?
delphi ×10
delphi-xe2 ×10
app-store ×1
delphi-2007 ×1
delphi-xe3 ×1
firebird ×1
firebird2.5 ×1
loops ×1
pointers ×1
tstringlist ×1
variables ×1
windows-8 ×1