2016-08-30 3 views
1

메모 행 문자열을 TRecords 필드에 전달하여 idHTTP POST 메서드의 매개 변수로 사용하는 방법은 무엇입니까?Rcords를 사용하여 큐에 매개 변수 전달하는 방법

는 일반적으로 ID는이

for i := 0 to Memo1.Lines.Count-1 do 
begin 
    P := Pos('+', Memo1.Lines.Strings[i]); 
    Email:= Copy(Memo2.Lines.Strings[i], 1, P-1); 
    Name:= ExtractName(Memo2.Lines.Strings[i]); 
    lPOSt // HTTP POST; //Email&Name Global Var for HTTP post Params 
    Sleep(1000); 
end; 

처럼하지만 난 레코드를 사용 할 파이프 라인 패턴으로 그것을 할, 그래서 난 큐에 매개 변수를 전달할 수 있습니다. 또는 POST 메서드의 매개 변수로 및 Name을 사용하는 방법이 있습니까? 사용하여 HTTP 가져 오기

procedure TForm2.StartButtonClick(Sender: TObject); 
var 
    s  : string; 
    urlList : TStrings; 
begin 
    urlList := Memo1.Lines; 
pipeline := Parallel.Pipeline; 
pipeline.Stage(Retriever).NumTasks(10).Run; 

// Retriever>>>idHTTP GET opertaion 
//how to modify the pipeline input after using records as Params? 

for s in urlList do 
    pipeline.Input.Add(s); 
    pipeline.Input.CompleteAdding; 

어떤 도움이 감사

Reply := TStringList.Create; 
Params.Add('Email=' + Email); // Email is Global Var 
Params.Add('Name=' + Name); // Name is Global Var 
lHTTP.Post('http://www.mywebserverx.com/', Params); 

type 
    TRecords = record 
    Name : string; 
    eMail : string; 
    Car: string; 
end; 

내 파이프 라인의 코드.

+0

귀하의 질문에 약간 불명입니다. 파이프 라인에'TRecords'를 추가 하시겠습니까? 파이프 라인에서 어떤 일이 일어나야합니까? 어쩌면 정보 및/또는보다 완전한 예를 추가해야 할 것입니다. 나는 당신의 질문에 어쨌든 대답했다. 나는 지금 그것을 이해했다. –

+0

@ RenéHoffmann 게시물을 편집했습니다. 메모에'email + name' 문자열이 있습니다.이 문자열을 내 우편 방법의 매개 변수로 사용하고 싶습니다. 일반적으로 전자 메일과 함수를 사용하여 이름을 구분합니다. – Thunderx

+0

@ RenéHoffmann이 여기에 있습니다. [http : // howover-flow-questions/39439950/how-to-take-the-input-string-to-the-output-of-pipeline-pattern] – Thunderx

답변

1

pipeline.InputIOmniBlockingCollection입니다. 방법 IOmniBlockingCollection.AddTOmniValue 유형의 매개 변수를 필요로합니다. 대부분의 유형에서는 TOmniValue이 많은 암시 적 클래스 연산자를 구현하기 때문에 변수를 매개 변수로 넣을 수 있습니다. 이 암시 적 클래스 연산자는 변수가 TOmniValue이 아닌 경우 모든 작업을 수행합니다.

그러나 TOmniValue은 레코드에 대해 암시 적 클래스 연산자를 구현하지 않습니다. 레코드 유형의 경우 사용자가 직접 TOmniValue으로 전송해야합니다. 다행히도 TOmniValue에는 TOmniValue.CastFrom<T>()에 대한 일반 클래스 함수가 ​​있습니다.

TRecords (나쁜, 모호한 이름 인 imho) 레코드를 추가하려는 경우 pipeline.Input.Add(TOmniValue.CastFrom<TRecords>(RecordsVar)을 호출하기 만하면됩니다.

하지만 왜 호출 스레드에서 모든 구문 분석을 수행 하시겠습니까? 그것이 현재 구현처럼

호출 스레드는 문자열을 추가해야합니다 :

for s in urlList do 
    pipeline.Input.Add(s); 
pipeline.Input.CompleteAdding; 

하면 구문 분석 파이프 라인에서 발생 보자. 여기에서 암시 적 캐스팅을 TOmniValue에서 string까지 사용할 수 있습니다.