Lazarus 初識

Lazarus 使用 Free Pascal 的編譯器,支持 Object Pascal 語言,與 Delphi 高度兼容,並看作後者的自由軟件替代品。api

Lazarus 下載與安裝

咱們先去 Lazarus 官網下載 http://www.lazarus-ide.org/ Windows (64 Bits) 版本的安裝程序,我用的電腦是Win10 64位,下載後開始安裝便可,安裝界面以下:app

18001

一路 Next 便可安裝完畢,安裝完在桌面上就有了 Lazarus 圖標,一個豹子的圖標。ide

雙擊 Lazarus 圖標後,先出來 Lazarus IDE Configure 窗口,以下圖:測試

18002

保持默認設置便可,直接點右下角的 Start IDE 按鈕,啓動 IDE。ui

18003


Hello world

界面是否是很熟悉呀,Delphi 7的感受又回來了。下面咱們試着寫寫 Hello world 吧。this

一、在 Form1 窗口上放置一個 TButton 按鈕spa

18004

二、雙擊 Button1 按鈕,在 TFrom1.Button1Click 事件中添加以下代碼:3d

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

三、按 F9 鍵,開始運行,點擊 Button1 按鈕後彈出 Hello world 對話框。code

18005

經過以上示例,咱們對 Lazarus IDE 有了初步的熟悉,和 Delphi 保持高度的兼容,快捷鍵呀,界面呀,很容易上手。orm


A Text File Converter 示例

下面咱們參考 Marco Cantù 《Essential Pascal》第四版中第 131 頁,編寫一個  A Text File Converter(文本轉化控制檯程序),程序功能是經過參數-U –R –C 來實現將文本文件轉化爲大寫,句子首字母大寫等。

一、在 Lazarus 菜單中選擇 【File –> New…】

 18006

二、在彈出的 New… 對話框選擇 【Project – Console application】,建立一個控制檯程序。

18007

三、彈出 New console application 對話框,咱們只建立最簡單的控制檯程序,直接點 Cancel 按鈕關閉就行。

18008

四、這樣我就獲得了最簡單的控制檯程序 project1.dpr 代碼以下:

18009

五、點擊 【File – Save All】,將程序保存,文件結構以下:

18010

六、在 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.

七、新建一個 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.

八、按 Ctrl + F9 編譯經過,在 Run 菜單下選擇 Build File,生成 project1.exe 文件,最終目錄以下:

18011

九、在 project1.exe 目錄下咱們新建一個 input.txt 文件和 output.txt 文件,其中 input.txt 文件內容下:

18012

十、在 cmd 窗口中輸入下面的命令,用到 –U 參數,將文本轉化爲大寫

18013

十一、回車執行命令後,打開 output.txt 咱們發現,文本已是大寫了。

18014

十二、咱們繼續測試 –C 參數,目的是將每一個句子首字母變成大寫。

18015

1三、回車執行後,打開 output.txt 文本中每一個句子首字母已是大寫字母了。

18016


以上代碼在 Lazarus IDE v1.8.0 中測試經過,示例代碼請下載

LazarusATextFileConverter.rar

相關文章
相關標籤/搜索