Lazarus 初识

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

Lazarus 下载与安装

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

18001

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

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

18002

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

18003


Hello world

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

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

18004

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

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

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

18005

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


A Text File Converter 示例

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

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

 18006

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

18007

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

18008

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

18009

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

18010

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 文件,最终目录如下:

18011

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

18012

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

18013

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

18014

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

18015

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

18016


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

LazarusATextFileConverter.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值