gorby
(Noteworthy UiPath Forum contributer 2024)
1
こんばんは
UiPath Studio 2025.0.161 community editionのユーザです。
1.やりたいこと
DataRow配列のarr_DataRowがあります。
arr_DataRowの要素であるDataRowは、例えば{ “06/05/2024 06:16:54”, “Info”, “実行ログ” }の3個のString変数で構成されます。下記がサンプルデータです。
|TimeStamp|Level|Message|
|06/05/2024 06:16:54|Info|Initiation:Started|
|06/05/2024 07:16:56|Info|InputFileExistingCheck:Started|
|06/05/2024 08:16:56|Info|InputFileExistingCheck:Ended|
|06/05/2024 11:16:56|Info|GetAllTransactionData:Started|
|06/05/2024 16:16:58|Info|GetAllTransactionData:Ended|
これをForEachアクティビティでcurrentDataRowでiterateして辞書変数dic_logに変換したいです。
dic_logの変数の型はDictionary<String,Object>で、最初のTimeStampがKeyで、残りのLevel,MessageがValueになります。
2.悩んでいること
自力では作成できませんでした。サンプルコードが作成できる方、ご支援をお願いいたします。
Hi @gorby
If you are using for each use an assign statement
dic_log(currentDataRow("TimeStamp").ToString) = {currentDataRow("Level").ToString, currentDataRow("Message").ToString}
Else if you want to go with linq try this
dic_log = arr_DataRow.ToDictionary(Function(row) row("TimeStamp").ToString,
Function(row) New Object() {row("Level").ToString, row("Message").ToString})
Hope this helps
Yoichi
(Yoichi)
3
まず右辺の型を明確にした方が良いかと思います。Object型ですと任意の型を格納できますので。
仮にdatarowをそのまま格納するのであれば以下になります。
なおログのタイムスタンプは一般的にユニークは保証されませんので(ましてや秒単位レベルならなおさら)、DictionaryのKeyとしてはあまり適当ではないと思います。
gorby
(Noteworthy UiPath Forum contributer 2024)
4
ログのTimeStampがユニークで無い場合は、いずれかのキーに上書きされるのでしょうか?それとも動的エラー発生?
gorby
(Noteworthy UiPath Forum contributer 2024)
6
Dictionary型変数はDatatableのように何行もデータが積み重なっているイメージですので、正確には格納形式はDataRowではない気がします。Dictionary<String,DataRow>のDataRowは、正しくはDataRow□で格納されている、という認識でよろしいですか?
Yoichi
(Yoichi)
7
よろしくないです。
型がDictionary<String,DataRow>であればValueの型はDataRowになります。
gorby
(Noteworthy UiPath Forum contributer 2024)
8
何故かDictionary<String,DataRow>と変数を変数パネルで定義しても静的エラーが起きませんが、一般的には、DataRowをDictionary変数に格納する場合、Dictionary<String,DataRow□>が正しいという認識で合ってますか?
Yoichi
(Yoichi)
9
一般的とは何を指していますか?
DataRow単体をValueとするのであれば、上記の解釈はあっていません。
DataRow配列をValueとするのであれば、Dictionary<String,DataRow[]>になります。