我想知道如何设置多维数组的长度/在Pascal中创建动态多维数组.就像SetLength(arr,len)一维数组一样.我找不到答案.
如果不随意移动它,这可能不是这个问题的正确位置.我标记为Delphi/Pascal,因为它是我在atm工作的,但这可能适用于我猜的所有编程.
无论如何,我正在做一些代码清理,并考虑将程序中的所有字符串移动到单独的.pas文件中.这样做有利有弊吗?它甚至值得做吗?
澄清一下:我的意思是我将创建一个单独的文件,Strings.pas中我会创建所有文本字符串变量.
防爆
现行守则
Messages.Add('The voucher was NOT sent to ' + sName+
' because the application is in TEST MODE.');
Messages.Add('Voucher Saved to ' + sFullPath);
Messages.Add('----------------------------------------------------------');
Run Code Online (Sandbox Code Playgroud)
新代码将是这样的:
Messages.Add(sMsgText1 + '' + sName + '' + sMsgText2 + '' + sFullPath)
Run Code Online (Sandbox Code Playgroud)
Strings.pas文件将保存所有字符串数据.希望更有意义
我对用Delphi/Pascal或C++编写的库(用于windows)感兴趣,它允许我记录(到视频格式)桌面屏幕,要求:
如果可能的话:
如果有任何机会,我没有解释正确的事情,请随时问我所以我可以改写或提供更多细节等.
在Delphi中是否有预定义的字符集,以检查字符是否是字母?
在Cocoa我使用类似的东西
if ([[NSCharacterSet whitespaceCharacterSet] characterIsMember:character])
Run Code Online (Sandbox Code Playgroud)
我知道我可以在德尔福做
if c in ['A'..'Z'] then
Run Code Online (Sandbox Code Playgroud)
但这会涵盖Á,À,Ú,É,......等外国人强调的角色吗?
在Delphi中检查这个的最有效方法是什么.我需要检查字符串是否完全由字母组成.
Program ConstTest;
Const constVar = 1;
Begin
constVar := 3;
WriteLn(constVar);
End.
Run Code Online (Sandbox Code Playgroud)
很明显上面的代码不会编译,因为改变常量的值是不对的.但是,下面的代码将编译,并将返回"1; 5; 3;",即使数组是const:
Program ConstTest;
Const constArr:Array [1..3] Of ShortInt = (1,2,3);
Var i:ShortInt;
Begin
constArr[2] := 5;
For i:=1 To 3 Do WriteLn(constArr[i],'; ');
End.
Run Code Online (Sandbox Code Playgroud)
那么,是什么导致了这种行为?为什么常数实际上不是常量?
我正在使用FreePascal Compiler 2.2.0 for Win32.
对于在Pascal中返回值的函数,FunctionName := SomeVal;使用赋值.我认为它不会像return在C中那样在那个确切的位置停止函数执行.return在Pascal中有类似C的东西吗?(我正在使用FreePascal编译器)
我想在Delphi中创建一个函数来计算两个字符串的不同级别.如果两个字符串相等(忽略大小写),则它应返回0,但如果它们不相等,则应返回不同字符的数量.此功能对于检查拼写非常有用.
function GetDiffStringLevel(S1,S2:string):Integer;
begin
if SameText(S1,S2) then Exit(0);
// i want get different chars count
end
Run Code Online (Sandbox Code Playgroud)
样品代码:
Diff:=GetDiffStringLevel('Hello','Hello');// Diff:=0;
Diff:=GetDiffStringLevel('Hello','2Hello');// Diff:=1;
Diff:=GetDiffStringLevel('Hello','H2ello');// Diff:=1;
Diff:=GetDiffStringLevel('Hello','Hello W');// Diff:=2;
Diff:=GetDiffStringLevel('Hello','World');// Diff:=6; or 5
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个Pascal等价物(例如)php的substr函数,它的工作原理如下:
$new_string = substr('abcdef', 1, 3); // returns 'bcd'
Run Code Online (Sandbox Code Playgroud)
我已经找到了它,但我总是花费太长时间才这样做,所以我发布了像我这样的其他人的答案,以便能够轻松找到它.
自从我上次在Pascal写作以来已经有20年了.我似乎无法正确使用语言的结构元素,而不是使用begin和end的块.例如,这给我一个编译器错误"标识符预期"
procedure InitializeWizard;
begin
Log('Initialize Wizard');
if IsAdminLoggedOn then begin
SetupUserGroup();
SomeOtherProcedure();
else begin (*Identifier Expected*)
Log('User is not an administrator.');
msgbox('The current user is not administrator.', mbInformation, MB_OK);
end
end;
end;
Run Code Online (Sandbox Code Playgroud)
当然,如果我删除if then块和begin与它们相关的块,那么一切都OK.
有时我会得到这种语法,并且它可以正常运行,但是在嵌套end块时问题会变得恼怒.
解决这个问题还不够.我想更好地了解如何使用这些块.我显然错过了一个概念.来自C++或C#的东西可能正在从我的另一部分中悄悄进入并弄乱我的理解.我已经阅读了一些关于它的文章,我认为我理解它然后我没有.
使用System.Move()从字符串数组中插入/删除项目并不像从其他简单数据类型中插入/删除它那么容易.问题是...字符串是在Delphi中计算的引用.在引用计数数据类型上使用Move()需要更深入的内部编译器行为知识.
有人可以在这里解释为实现这一目标所需的步骤,或者更好地使用一些代码片段,或者指导我在互联网上提供一个很好的参考?
哦,请不要告诉我使用"懒惰但缓慢的方式",也就是说,对于循环,我知道.
pascal ×10
delphi ×6
freepascal ×3
arrays ×1
c++ ×1
const ×1
delphi-2010 ×1
delphi-xe ×1
dynamic ×1
inno-setup ×1
pascalscript ×1
string ×1
substr ×1
substring ×1