标签: freepascal

迄今为止的帕斯卡字符串

有人可以告诉我这段代码有什么问题吗:

ShortDateFormat := 'dd/mm/yyyy';
j:=StrToDate('05/05/1999');
Run Code Online (Sandbox Code Playgroud)

我不断得到

An unhandled exception occurred at $000000000042FA33 :
EConvertError : Invalid date format
Run Code Online (Sandbox Code Playgroud)

我用的是fpc。

pascal date freepascal

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

如何转义 Free-Pascal 中的保留字?

实际上我正在努力将一些库翻译成 free-pascal。所以问题是在delphi中可以使用&符号来转义保留字,但在free-pascal中不起作用。编译器抱怨此消息
ForLibDx.pas(72,13) Fatal: illegal character "'&'" ($26)

当包含 & 符号时。

实际上我正在使用{$MODE DELPHI}free-pascal 下编译我的单元

软板2.2.4

拉撒路0.9.28.2

提前致谢。

delphi freepascal lazarus

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

仅允许字符串中的某些字符

我想验证一个字符串,通过它在哪里可以包含所有alphebetical和数字字符,如藏汉下划线(_)符号.

这是我到目前为止所尝试的:

var
  S: string;
const
  Allowed = ['A'..'Z', 'a'..'z', '0'..'9', '_'];
begin
  S := 'This_is_my_string_0123456789';

  if Length(S) > 0 then
  begin
    if (Pos(Allowed, S) > 0 then
      ShowMessage('Ok')
    else
      ShowMessage('string contains invalid symbols');
  end;
end;
Run Code Online (Sandbox Code Playgroud)

在拉撒路这个错误:

错误: arg no的类型不兼容.1:得到"Set of Char",期待"Variant"

显然我对Pos的使用都是错误的,我不确定我的方法是否是正确的解决方法?

谢谢.

delphi freepascal lazarus delphi-xe

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

Freepascal在Windows下的每个输出上刷新stdout?

看看以下四个程序.在Windows下使用Freepascal构建它们并运行,将输出重定向到任何文件,并注意它将花费的时间.

我的结果是:所有程序运行的时间大约相同(大约6秒),尽管第四个程序输出的字节数是100倍.这意味着第四个程序的每个输出字节的运行速度比其他字节的运行速度快得多.

对于第二个节目,缓慢的原因很明显:flush电话.对于第三个程序,原因并不那么明显,但假设每次调用writelnstdout都隐式刷新输出缓冲区可能是合理的.

但是,目前尚不清楚为什么第一个程序比第四个程序慢得多.然而,添加flush(output);(参见程序2)并不会改变时序的事实似乎意味着FPC甚至在每次刷新后都会刷新输出缓冲区write,这可以解释所有行为.仅当输出为stdout,甚至重定向时才会发生这种情况; 如果我使用assign/rewrite显式输出到特定文件,那么没有flush的程序运行速度比具有flush的程序要快得多 - 正如应该的那样.

在Linux下,运行时间为0.01秒,0.65秒,0.01秒,0.30秒(输出大100倍).这里显然flush()减慢程序,所以在Linux下FPC似乎不会每次刷新stdout.

我试图谷歌是否FPC真的刷新stdout缓冲区在每个输出(是它writewriteln),但没有找到任何信息,除了示例程序中的注释来自http://www.freepascal.org/docs-html的 flush函数文档/rtl/system/flush.html,评论提到a writeln到'output'总是会导致刷新[而不是write].但是,这个例子既没有在Windows下产生预期的输出,也没有在Linux下产生.实际上,输出似乎在Windows下的每次写入和写入之后刷新,重定向或不重定向,并且在输出未重定向时也在Linux下刷新.在具有重定向输出的Linux下,似乎根本没有隐式刷新.

所以,我的问题是:

  1. 在每次输出之后FPC是否刷新输出缓冲区是真的,write或者writeln在Windows上是否将输出重定向到文件?
  2. 如果是,那么有什么方法可以关闭它(一些编译器指令,或解决方法)?我仍然需要将输出保持为stdout,这样如果我启动程序没有任何重定向,它将输出文本到控制台.(我知道我可能会看到它出现在奇怪的时候,因为缓冲,这不是问题.)
  3. 如果没有,那么为什么第一个程序比第四个程序慢得多?

我的系统是在Kubuntu 14.04下的VirtualBox下使用FPC 2.6.4的Windows XP,以及使用FPC 2.6.2的Kubuntu 14.04本身.我没有机会尝试在真正的Windows机器上运行它,但我有理由相信那里的情况是一样的.


节目:

var i,j:integer;
    s:string;
begin
for j:=1 to 1000 do begin
   for i:=1 to 10 do 
      write('!');
end;
end.
Run Code Online (Sandbox Code Playgroud)
var i,j:integer;
    s:string;
begin
for j:=1 to 1000 do begin
   for i:=1 to 10 do begin
      write('!');
      flush(output); …
Run Code Online (Sandbox Code Playgroud)

windows stdout freepascal flush

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

Lazarus 本地化/多个项目

我有一些 Delphi 经验,并且正在尝试使用 Lazarus 构建一个项目,这对我来说是全新的。

我想,我已经阅读了有关 Lazarus、翻译/国际化/本地化的所有可用信息,但我无法找到我真正想要的内容。

我一直在一个包含 3 或 4 个可执行文件的项目中工作,它们之间共享相同的数据库、相同的接口(表单继承)、通用实用程序、设置以及通用和相关字符串。

我不想有 3 或 4 个具有不同名称的 .po 文件(每个 EXE 一个),并且它们之间共享相同的公共字符串。

有解决办法吗?

  • 可能会为所有应用程序强制使用一个“gobal.po”?如何?
  • 我是否必须创建自己的系统来本地化\将所有字符串集中在一个文件中?

有什么建议么?

谢谢你的帮助。问候,

freepascal lazarus

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

帕斯卡(免费或涡轮)阅读

我试图理解fpc -Mtp -vw在 Linux 下以 Turbo 模式(特别是)编译的 Free Pascal 中看到的某种神奇的行为。代码来自 Jack Crenshaw 的“让我们构建编译器”,第四部分,特别是带有InputOutput程序的最后一个版本,可在http://www.pp4s.co.uk/main/tu-trans-comp-jc-04找到html的。我发现“神奇”的是程序中的Read(Table[GetName]);那一行Input。根据 FP 文档,“Read从文件 F 中读取一个或多个值,并将结果存储在 V1、V2 等中;如果未指定文件 F,则读取标准输入。” 在Read是在GetChar过程中,它似乎行为很像C'S getchar(),即检索标准输入缓冲区中的下一个字符。在里面Input调用它似乎表现得像一个复杂的scanf()自动跳过空格并将多位数字转换为整数,并消除对GetNum函数的需要,如果你使用,它不会被调用,例如?i 345,但会被调用如果你尝试i=345,如果你=在解析错误的结果两边留一个空格。是否有其他一些文件证实了 Free、Turbo 甚至通用 Pascal 的明显多功能性Read

pascal freepascal turbo-pascal

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

有没有办法确定对对象过程的引用是否对应于 Pascal 中的对象实例?

对于这项任务,我有一个不太好的解决方案,但有人可以告诉我如何使用标准库或更优雅的方法。当前的解决方案是基于这样一个事实,即对对象过程的引用在内存中存储了两个指针,一个指向过程代码的指针和一个指向对象的指针。

function IsObject( const AEvent: TNotifyEvent; const AObject: TObject ): Boolean;
begin
  Result := PointerArray( Pointer( @AEvent )^ )[1] = Pointer( AObject );
end;
Run Code Online (Sandbox Code Playgroud)

pascal freepascal

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

在 Pascal 中创建一个类

我正在尝试用 Pascal 创建一个类,我对声明和语法有点困惑。主要的事情是我收到“ Forward declaration not solved Tetromino.Rotate(LongInt)”错误,我读到我需要在实现部分声明我的程序,但我不确定我应该把它放在哪里。另外,如果您发现我的班级声明有任何其他问题,请告诉我。

program Tetris;
{$MODE OBJFPC}
uses crt, sysutils;
type 
    Tetromino = class
    
    private
        TempFace : array [0..15] of char;       
    public
        Face : array[0..15] of char;
        //constructor create();  (idk what this is but read somewhere that you need it)
        procedure Rotate(rotation : integer);
    end;
var
    a,b,c,d,e,f,g : tetromino;
begin
    ReadKey();
end. 
Run Code Online (Sandbox Code Playgroud)

pascal freepascal

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

CASE <var> OF 实际上意味着 CASE <var> EQUALS 吗?

CASE <var/expr> OF
      1: <do statement>;
      2: <do statement>;
   3..5: <do statement>;
END;
Run Code Online (Sandbox Code Playgroud)

始终有效意味着:

(in) CASE <var/expr> EQUALS
      1: <do statement>;
      2: <do statement>;
   3..5: <do statement>;
     ^ value/char in range
END;
Run Code Online (Sandbox Code Playgroud)

翻译成自然语言?我只是想知道为什么会做出这样的措辞选择。否则,Pascal 语法看起来读起来很自然、符合语法。但也许我对“案例陈述”的理解不正确?

编辑:添加范围大小写,并在 (in) 周围添加括号,因为它会让人们感到困惑。

delphi pascal freepascal turbo-pascal

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

调用delphi程序作为方法

这是我编写得很好的简单代码,但会引发访问冲突.它进入MD程序并且调试器显示一些X和Y值,但在退出程序AV后发生.希望有人能提供帮助.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,  ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

    {$R *.dfm}

procedure MD(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  form1.caption:= inttostr(x)+ ' '+ inttostr(y);
end;

procedure TForm1.FormCreate(Sender: TObject);

function MakeMethod(data, code: pointer): TMethod;
begin
  result.Data:= data;
  result.Code:= code;
end;

begin
  panel1.OnMouseDown:= TMouseEvent(MakeMethod(nil, @MD));
end;

end.
Run Code Online (Sandbox Code Playgroud)

谢谢

delphi freepascal lazarus

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

标签 统计

freepascal ×10

pascal ×5

delphi ×4

lazarus ×4

turbo-pascal ×2

date ×1

delphi-xe ×1

flush ×1

stdout ×1

windows ×1