2009-03-25 5 views
0

다음과 같은 프로그램이 있는데 거의 작동하지만 컴파일을 시도 할 때 다음 오류가 발생합니다. 어떻게 해결해야할지 모르겠군요! 어떤 아이디어?파스칼 - 다시 : 용도

양식, 'mainform.pas'에서 mainform ...

"로, Unit1.pas (9), 또는 예상하지만, 'IN'발견, "프로젝트 1은 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.pas '의 mainform이있는 행).

+0

사실입니다.하지만 파서가 아직까지 그렇게 생각하지 않았습니다. – RobS

+0

그래, 아마 맞을거야. 나는 6 년 넘게 파스칼에 손을 대지 않았으므로 조금 녹슬었다. ;) –

2

Delphi Basics에 따르면 "in"은 프로그램 및 라이브러리에만 적용되며 단위가 아닙니다.

+0

물론 감사합니다. 대신에 무엇을 사용할 수 있는지 알고 있습니까? –

+0

"파일 이름"부분을 제거하고 제대로 작동하는지 확인하십시오. – RobS

+0

그렇지 않으면 델파이 또는 프로젝트 만 검색 경로를 확장하거나 mainform.pas를 dpr에 추가하십시오. –

1

단위 코드와 프로젝트 코드가 혼합되어 있습니다.

Delphi (및 freepascal)에서 프로젝트 파일 (.dpr)을 사용하면 OS 파일을 지정하여 사용자 정의 원본 파일 (대개 사용자 단위)을 포함 할 수 있습니다. 미리 컴파일 된 유닛을 찾지 않도록 컴파일러에 알리는 데 사용됩니다.

project MyApp; 

uses 
    forms, 
    unit1 in 'unit1.pas'; 

사용자가 제공 한대로이 작업을 수행 할 수 없습니다.

IN 및 따옴표 붙은 문자열을 제거하면 코드의 나머지 오류를 정리하는 한 괜찮습니다.