2016-08-30 8 views
1

Как я могу передавать строки заметок в строки TRecords, чтобы использовать тему в качестве параметров для idHTTP POST methode?Как использовать Rcords для передачи параметров в очередь

обычно делают это идентификатор, как этот

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; 

но в шаблоне трубопровода я должен использовать записи, так что я могу передать параметры в очереди. Или есть способ использовать Email и Name в качестве параметров для метода POST?

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; 

Мой код трубопровода, используя HTTP Get

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; 

любая помощь приветствуется.

+0

Ваш вопрос немного неясен для меня. Вы хотите добавить «TRecords» в конвейер? Что должно произойти в трубопроводе? Возможно, вам следует добавить дополнительную информацию и/или более полный пример. Я все равно ответил на ваш вопрос, пока я это понял. –

+0

@ RenéHoffmann Отредактировано сообщение, у меня есть записка содержит строки 'email + name', я хочу использовать эти строки в качестве параметров в моем методе post, я обычно разделяю функции электронной почты и имени, используя функции – Thunderx

+0

@ RenéHoffmann смотрите здесь [http: // stackoverflow.com/questions/39439950/how-to-take-the-input-string-to-the-output-of-pipeline-pattern] – Thunderx

ответ

1

pipeline.Input имеет тип IOmniBlockingCollection. Метод IOmniBlockingCollection.Add ожидает параметр типа TOmniValue. Для большинства типов вы можете просто поместить переменную в качестве параметра, потому что 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.

 Смежные вопросы

  • Нет связанных вопросов^_^