标签: pascal

DELPHI:如何在循环或案例之外使用"break"?

考虑以下delphi pascal代码:

var
  tc: TComponent
begin
{ do something to get tc }
repeat
  if(tc is TDBEdit)then begin
    if(check_something_about_edit(tc))then break;
    do_something_else_edit(tc);
    break;
  end else if(tc is TBMemo) then begin
    if(check_something_about_memo(tc))then break;
    do_something_else_memo(tc);
    break;
  end;
  raise exception.create('invalid component type');
until(true); {single iteration look required to use break }
Run Code Online (Sandbox Code Playgroud)

我知道我可以用TComponent做一些多态的东西,但这不是我的问题.我想知道是否有办法摆脱单次迭代repeat-until语句.没有它,我不能在处理块的任何地方使用break语句,我需要随时停止处理.

delphi syntax pascal break

3
推荐指数
2
解决办法
7630
查看次数

Pascal:"或"不支持类型"Char"

我是新来的,对不起,如果我做错了什么!

我在Lazarus做了一个简单的Pascal程序,编译时遇到这个错误:

HWE(16,18)错误:类型"Char"和"Constant String"不支持"或"操作

这是它抱怨的部分:

Repeat
begin
Readln(style);
If style <> ('e' or 'mp' or 'sa') then
Writeln ('do what I say!')
end
Until style = (e or mp or sa); 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

pascal

3
推荐指数
1
解决办法
6776
查看次数

我可以在线而不是在函数顶部声明变量吗?

我大约5年前使用过visual basic.

但是我已经开始使用5年前的delphi(当大多数开发人员从delphi跳到visual studio时)delphi就像vb一样容易,同时它也很强大.自从pascal以来Delphi有很多变化(例如:字符串必须以不同的方式组合在pascal而不是仅仅使用+)才能更快地编写脚本.

但为什么在delphi中我们必须声明var在顶部,当我为一个过程编写许多语句时,我必须向上滚动并声明一个var并再次下降.delphi是世界上最好的(有时是唯一的)MOST RAPID'est'IDE之一,但为什么他们不支持在vb c#etc中的任何地方声明变量

delphi variables pascal declaration

3
推荐指数
4
解决办法
5112
查看次数

如何从表单单元外部访问delphi控件?

我试图调用一个计时器从这样的定义的过程Enabled属性:procedure Slide(Form: TForm; Show: Boolean);而不是有固定的形式名称(如:Form2.Timer...)

将表单的单位放入使用列表后,这可以工作:Form2.Timer1.Enabled := True; 但以下操作无效:( Form.Timer1.Enabled := True;其中Form是作为参数传递给过程的表单.

如何访问表单上的Timer组件?

提前致谢.

delphi pascal

3
推荐指数
1
解决办法
7701
查看次数

"(.1..10.)"在数组声明中的含义是什么?

Nick Hodges在一篇文章中提到以下内容仍在编写:

var
  WeirdLookingArray: array(.1..10.) of string;
Run Code Online (Sandbox Code Playgroud)

的意义是什么 "." 在开始和结束?

delphi syntax pascal

3
推荐指数
2
解决办法
413
查看次数

Pascal比较字符串

我需要查看一个字符串是否与AS EMPTY STRING不同.像:string!=''; 我怎样才能在Pascal中实现它?

string pascal

3
推荐指数
1
解决办法
3244
查看次数

Delphi:如何根据(动态)掩码将字符串动态"拆分"为子字符串

这是我的情况:我有一个文本文件,其中包含许多等长字符串,表示要加载到SQL DB表中的记录,所以我必须从这些字符串生成SQL代码.
我在那个数据库上有一个表(我们称之为"格式化表")告诉我字符串是如何格式化的以及加载它们的位置(该表的每个记录包含目标表名,字段名,数据位置和长度)从文本文件中引用字符串).

我已经以一种我认为每个Delphi程序员都熟知的方式解决了这个问题,使用该Copy(string, pos, length)函数并根据"格式化表"中的信息迭代每个字段.
这很有效,但速度很慢,特别是当我们谈论具有一百万或更多行的源文本文件时,每行代表几十甚至几百个数据字段.

我现在要做的是以一种它们看起来已经分裂的方式"看到"源字符串,避免Copy()不断创建新字符串的功能,从原始字符串复制内容,分配和释放内存等等.我所说的是"我拥有整个字符串,让我们在一个步骤中以一种代表每个'片段'(字段)的方式看待它,而不是从它创建子串".

什么可以解决我的问题将是某种方式来定义动态结构,如动态记录或动态数组(不是Delphy称之为动态数组,更像是"动态静态数组")以按顺序"叠加"在字符串上从这个角度"观察"它...我不知道我对这个解释是否足够清楚......但是Delphi(据我所知)并没有实现这种动态结构.

除了缺乏活力之外,这是一个(静态)代码,可以满足我的需求.

procedure TForm1.FormCreate(Sender: TObject);
type
  PDecodeStr = ^TDecodeStr;
  TDecodeStr = record
    s1: Array[0..3] of AnsiChar;
    s2: Array[0..9] of AnsiChar;
    s3: Array[0..4] of AnsiChar;
    s4: Array[0..7] of AnsiChar;
    s5: Array[0..2] of AnsiChar;
  end;
var
  cWholeStr: AnsiString;
begin
  cWholeStr := '123456789012345678901234567890';
  Memo1.Lines.Add(PDecodeStr(PAnsiString(cWholeStr)).s1);
  Memo1.Lines.Add(PDecodeStr(PAnsiString(cWholeStr)).s2);
  Memo1.Lines.Add(PDecodeStr(PAnsiString(cWholeStr)).s3);
  Memo1.Lines.Add(PDecodeStr(PAnsiString(cWholeStr)).s4);
  Memo1.Lines.Add(PDecodeStr(PAnsiString(cWholeStr)).s5);
end;
Run Code Online (Sandbox Code Playgroud)

有关如何解决这个问题的任何想法?

提前致谢.

delphi string pascal

3
推荐指数
1
解决办法
1136
查看次数

Delphi类型等价和类型相等语法

这两种语法有什么区别?

Type
  AnIntType = Integer;
  AnotherIntType = Type Integer;
Run Code Online (Sandbox Code Playgroud)

我注意到第二个版本在程序参数(如Var/Const)中使用时兼容性较差,但不是AnIntType和AnotherIntType完全相同吗?

delphi pascal

3
推荐指数
2
解决办法
734
查看次数

Pascal'Split'功能

我正在使用pascal编写一个小程序,但我遇到了一个小问题.在其他语言中,有一个名为"split"或"explode"的函数来获取由定义的字符打断的长字符串,并将这个长字符串拆分为几个较小的字符串并将它们分配给一个数组.这就是我的意思,我想这样做:

longstring:='Word1.Word2.Word3');

Split('.', longstring, OutPutVariable) ;

{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}
Run Code Online (Sandbox Code Playgroud)

这不是真正的代码,因为pascal中不存在'split'.我认为它存在于Delphi中.anypne可以帮我解决这个问题吗?对不起,如果这是一个非常容易的问题,我是编程新手

arrays delphi string pascal split

3
推荐指数
2
解决办法
1万
查看次数

获得"布尔"预期"LongInt"帕斯卡

我的插入排序算法出现此错误:

insertionsort.lpr(19,17)错误:不兼容的类型:得到"布尔"预期"LongInt"

这是我的代码的第19行

 while j > 0 and A[j]>key do            
Run Code Online (Sandbox Code Playgroud)

我试过在互联网上搜索谷歌,但我找不到任何语法错误或任何东西.

如果它有帮助,这是完整的代码:

program instert;
uses crt;
const
  N = 5;
var
   i:integer;
   j:integer;
   key:integer;
   A : Array[1..N] of Integer;


procedure insertionsort;
  begin
  for i := 2 to N  do
    begin
    key := A[1];
    j:= i - 1;
        while j > 0 and A[j]>key do
        begin
          A[j+1] := A[j] ;
          j := j-1;
        end;
    A[j+1] := key ;
   end;
 end;

begin
  A[1]:= 9;
  A[2]:= 6;
  A[3]:= 7;
  A[4]:= 1;
  A[5]:= 2; …
Run Code Online (Sandbox Code Playgroud)

pascal boolean bubble-sort insertion-sort long-integer

3
推荐指数
1
解决办法
4821
查看次数