Lazarus 使用 Free Pascal 的编译器,支持 Object Pascal 语言,与 Delphi 高度兼容,并看做后者的自由软件替代品。

Lazarus 下载与安装

我们先去 Lazarus 官网下载 http://www.lazarus-ide.org/ Windows (64 Bits) 版本的安装程序,我用的电脑是Win10 64位,下载后开始安装即可,安装界面如下:

Lazarus 初识

一路 Next 即可安装完毕,安装完在桌面上就有了 Lazarus 图标,一个豹子的图标。

双击 Lazarus 图标后,先出来 Lazarus IDE Configure 窗口,如下图:

Lazarus 初识

保持默认设置即可,直接点右下角的 Start IDE 按钮,启动 IDE。

Lazarus 初识


Hello world

界面是不是很熟悉呀,Delphi 7的感觉又回来了。下面我们试着写写 Hello world 吧。

1、在 Form1 窗口上放置一个 TButton 按钮

Lazarus 初识

2、双击 Button1 按钮,在 TFrom1.Button1Click 事件中添加如下代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hello world');
end;

3、按 F9 键,开始运行,点击 Button1 按钮后弹出 Hello world 对话框。

Lazarus 初识

通过以上示例,我们对 Lazarus IDE 有了初步的熟悉,和 Delphi 保持高度的兼容,快捷键呀,界面呀,很容易上手。


A Text File Converter 示例

下面我们参考 Marco Cantù 《Essential Pascal》第四版中第 131 页,编写一个  A Text File Converter(文本转化控制台程序),程序功能是通过参数-U –R –C 来实现将文本文件转化为大写,句子首字母大写等。

1、在 Lazarus 菜单中选择 【File –> New…】

 Lazarus 初识

2、在弹出的 New… 对话框选择 【Project – Console application】,创建一个控制台程序。

Lazarus 初识

3、弹出 New console application 对话框,我们只创建最简单的控制台程序,直接点 Cancel 按钮关闭就行。

Lazarus 初识

4、这样我就得到了最简单的控制台程序 project1.dpr 代码如下:

Lazarus 初识

5、点击 【File – Save All】,将程序保存,文件结构如下:

Lazarus 初识

6、在 project1.lpr 中添加如下代码:

program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Convert
  { you can add units after this };
var
  I: Integer;
  Flag: char;
  inputFile,  outputFile: string;

begin
  // command line processing
  for I := 1 to ParamCount do
  begin
    if ParamStr(i) [1] = '-' then


      Flag := ParamStr(i) [2]
    else
      if inputFile = '' then
        inputFile := ParamStr(i)
      else
        outputFile := ParamStr(i);
  end;

  // check we have the two files and a flag
  if (inputFile = '') or (outputFile = '') or
    not (Flag in ['U', 'R', 'C']) then
  begin
    writeln ('Missing or wrong parameters');
    readln;
    Exit;
  end;

  // process the files
  DoConvert (inputFile, outputFile, Flag);

  readln;
end.

7、新建一个 Unit 文件,并保存为 Convert.pas 文件,其中代码如下:

unit Convert;

{$mode objfpc}{$H+}

interface

procedure DoConvert (const inputfile, outputfile: string; flag: Char);
procedure ConvUpper;
procedure ConvCapitalize;
procedure ConvSymbols;

implementation

uses
  SysUtils;

var
  FileIn, FileOut: TextFile;
  FileLength: LongInt;

procedure DoConvert (const inputfile, outputfile: string;
  flag: Char);
var
  F: file of Byte;
begin
  // compute the input file length
  AssignFile (F, inputfile);
  Reset (F);
  FileLength := FileSize (F);
  CloseFile (F);

  // open the text files
  AssignFile (FileIn, inputfile);
  Reset (FileIn);

  AssignFile (FileOut, outputfile);
  Rewrite (FileOut);

  // conversion...}
  // check the input flag
  case Flag of
    'U': ConvUpper;
    'C': ConvCapitalize;
    'R': ConvSymbols;
  end;

  // close the files
  CloseFile (FileOut);
  CloseFile (FileIn);
end;

procedure ConvUpper;
var
  Ch: Char;
  Position: LongInt;
begin
  Position := 0;
  while not Eof (FileIn) do
  begin
    Read (FileIn, Ch);
    Ch := UpCase (Ch);
    Write (FileOut, Ch);
    Inc (Position);
  end;
end;

function LowCase (C: Char): Char;
begin
  if C in ['A'..'Z'] then
    LowCase := Chr (Ord (C) - Ord ('A') + Ord ('a'))
  else
    LowCase := C;
end;

procedure ConvCapitalize;
var
  Ch: Char;
  Period: Boolean;
  Position: LongInt;
begin
  Period := True;
  Position := 0;
  while not Eof (FileIn) do
  begin
    Read (FileIn, Ch);
    case Ch of
      'A'..'Z':
        if Period then
        begin
          Write (FileOut, Ch);
          Period := False;
        end
        else
        begin
          Ch := LowCase (Ch);
          Write (FileOut, Ch);
          Period := False;
        end;
      'a'..'z':
        if Period then
        begin
          Ch := UpCase (ch);
          Write (FileOut, Ch);
          Period := False;
        end
        else
        begin
          Write (FileOut, Ch);
          Period := False;
        end;
      '.', '?', '!':
      begin
        Period := True;
        Write (FileOut, Ch);
      end;
      else
        Write (FileOut, Ch);
    end; // case
    Inc (Position);
  end; // while
end;

procedure ConvSymbols;
var
  Ch: Char;
  Position: LongInt;
begin
  Position := 0;
  while not Eof (FileIn) do
  begin
    Read (FileIn, Ch);
    if Ch < Chr (127) then
      Write (FileOut, Ch);
    Inc (Position);
  end;
end;
end.

8、按 Ctrl + F9 编译通过,在 Run 菜单下选择 Build File,生成 project1.exe 文件,最终目录如下:

Lazarus 初识

9、在 project1.exe 目录下我们新建一个 input.txt 文件和 output.txt 文件,其中 input.txt 文件内容下:

Lazarus 初识

10、在 cmd 窗口中输入下面的命令,用到 –U 参数,将文本转化为大写

Lazarus 初识

11、回车执行命令后,打开 output.txt 我们发现,文本已经是大写了。

Lazarus 初识

12、我们继续测试 –C 参数,目的是将每个句子首字母变成大写。

Lazarus 初识

13、回车执行后,打开 output.txt 文本中每个句子首字母已经是大写字母了。

Lazarus 初识


以上代码在 Lazarus IDE v1.8.0 中测试通过,示例代码请下载

LazarusATextFileConverter.rar

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-25
  • 2022-01-29
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-12
相关资源
相似解决方案