2009-03-25 8 views
0

私は次のプログラムを使っていますが、コンパイルしようとすると次のエラーが出ます。何か案は?パスカル - Re:用途

フォーム、 'mainform.pas' 内のMainForm ...

"unit1.pas(9):、または;期待されたが見つから 'は'; " Project1のunit1.pas

をコンパイルすることができませんでした
unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
    Dialogs, LibXmlParser, LibXmlComps, StdCtrls, 
    Forms, 
    mainform in 'mainform.pas' 
    mapimail in 'mapimail.pas'; 

type 
    TXMLRule = Record 
    alert, desc, act:string; 
    end; 

    TForm1 = class(TForm) 
    Button1: TButton; 
    EasyXmlScanner1: TEasyXmlScanner; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 
    Parser : TXmlParser; 
    MyXMLRules:Array[1..10] of TXMLRule; 
    i   :1..10; 

implementation 
{$R *.dfm} 

procedure ProcessXML(); 

begin 
    Parser := TXmlParser.Create; 
    Parser.Normalize := TRUE; 
    Parser.LoadFromFile ('c:\parser.xml'); 
    Parser.StartScan; 

    while Parser.Scan do 
    case Parser.CurPartType of 
    ptStartTag, 
    ptEmptyTag : 
     begin 

     end; 

    ptContent : 
     begin 
     if Parser.CurName = ('<alert>') then MyXMLRules[1].alert := Parser.CurContent; 
     if Parser.CurName = ('<desc>') then MyXMLRules[1].desc := Parser.CurContent; 
     if Parser.CurName = ('<action>') then MyXMLRules[1].act := Parser.Curcontent; 
     end; 
    end; 
    Parser.Free; 
end; 

procedure EmailAlert(); 
begin 
    Application.Initialize; 
    Application.CreateForm(TForm1, Form1); 
    Application.Run; 
end; 

procedure NoiseAlert(); 
begin 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
f:textFile; 
data:string; 
begin 
    ProcessXML(); 

    AssignFile(f, 'c:\nmap.txt'); 
    reset(f); 
    repeat 
     readln(f, data); 
     if (pos(MyXMLRules[1].alert, data)) <> 0 then 

     begin 
      if MyXMLRules[1].act 
      = ('Email') then 
         begin 
         EmailAlert 
         end; 
      if MyXMLRules[1].act 
      = ('Beep') then 
         begin 
         NoiseAlert 
         end; 
     end; 
     until EOF(f); 
end; 

end. 

答えて

3

9行目の末尾に「mainform in mainform.pas」という行があります。

+0

それは本当ですが、私はパーサーがまだそれを持っていないと思います。 – RobS

+0

ええ、あなたはおそらく正しいでしょう。私はパスカルに6年以上触れていないので、少し錆びています。 ;) –

2

Delphi Basicsによれば、「in」はプログラムやライブラリにのみ適用され、単位には適用されません。

+0

もちろんありがとうございます。代わりに何が使えるのか知っていますか? –

+0

"ファイル名"部分を削除して、それが機能するかどうか確認してください。 – RobS

+0

それ以外の場合は、Delphiまたはプロジェクトのみの検索パスを拡張するか、mainform.pasをdprに追加します。 –

1

ユニットコードとプロジェクトコードが混在しています。

Delphi(およびフリーパスカル)では、プロジェクトファイル(.dpr)を使用して、OSファイルを指定してカスタムソースファイル(通常はユニット)を含めることができます。これは、コンパイル済みのユニットを探すようにコンパイラに通知するために使用されます。

project MyApp; 

uses 
    forms, 
    unit1 in 'unit1.pas'; 

あなたが提供したように、これを行うことはできません。

INと引用符付きの文字列を削除してください。コード内の残りのエラーを取り除く限り、問題はありません。