String変数から空文字を1行で削除する構文

こんにちは。UiPath Studio Enterprise Editionを1週間後から使う予定のある初心者です。まだUiPathはインストールしていません。
String変数から空文字を削除する方法は下記を連続実行する方法があると認識しておりますが、1行で半角スペースと全角スペースを削除する構文はないでしょうか。

yourStringariable.Replace(" ", String.Empty)
yourStringVariable.Replace("全角スペース ", String.Empty)

こんにちは

以下お試しください(そのままコピー、ペーストください)

System.Text.RegularExpressions.Regex.Replace(yourStringariable,"[  ]","")

もう1点追加で教えてください。

Read RangeアクティビティでExcelシートのデータをdtに取得した場合、dtに取得したデータから一括で空文字を削除する方法はありますでしょうか?もしあれば具体的なコード事例でお示しいただけますと助かります。

Hi @gorby

Try this:

yourStringVariable.Replace(" ", "").Replace(vbTab, "")

Hope it helps!!

こんにちは

タイトルと離れた質問は別トピックを立てた方が良いかと思います。
(あとで検索する方がたどり着けるように)

Read RangeアクティビティでExcelシートのデータをdtに取得した場合、dtに取得したデータから一括で空文字を削除する方法はありますでしょうか?もしあれば具体的なコード事例でお示しいただけますと助かります。

InvokeCodeアクティビティで下記のコードで変換できます。

image

For Each row As DataRow In dt.AsEnumerable()
    For Each c As DataColumn In dt.Columns
	    row(c) = row(c).ToString.Replace(" ","")	
    Next
Next

引数はdtを入出力として設定してください。

1 Like

Hi @gorby

May be try this:

For DataTable:

YourDataTable = YourDataTable.AsEnumerable().Select(
    Function(row) YourDataTable.Columns.Cast(Of DataColumn)().ToDictionary(
        Function(col) col.ColumnName, 
        Function(col) If(IsDBNull(row(col)) OrElse String.IsNullOrWhiteSpace(row(col).ToString()), String.Empty, row(col).ToString())
    )
).CopyToDataTable()

This above LINQ query iterates through each row and each column of the DataTable, replacing any empty or whitespace-only values with an empty string.

For DataRow:

For Each column In YourDataRow.Table.Columns

Assign activity-> YourDataRow(column) = If(IsDBNull(YourDataRow(column)) OrElse String.IsNullOrWhiteSpace(YourDataRow(column).ToString()), String.Empty, YourDataRow(column).ToString())
Next

May be you could try this Invoke code too
For DataTable:

Dim dataTable As DataTable = YourDataTable

For Each row As DataRow In dataTable.Rows
    For Each column As DataColumn In dataTable.Columns
        row(column) = If(IsDBNull(row(column)) OrElse String.IsNullOrWhiteSpace(row(column).ToString()), String.Empty, row(column).ToString())
    Next
Next

Make sure to replace YourDataTable with the actual name of your DataTable variable. This code iterates through each row and each column of the DataTable, replacing any empty or whitespace-only values with an empty string.

For DataRow:

Dim dataRow As DataRow = YourDataRow

For Each column As DataColumn In dataRow.Table.Columns
    dataRow(column) = If(IsDBNull(dataRow(column)) OrElse String.IsNullOrWhiteSpace(dataRow(column).ToString()), String.Empty, dataRow(column).ToString())
Next

Replace YourDataRow with the actual DataRow variable in your workflow.

Hope it helps!!

ありがとうございます。WFを実行したら、作成いただいたアクティビティのところで、
Execption has been thrown by the target of an invocationというエラーが出ます。dtにデータが存在することはローカル出力で確認済みです。
原因分かりますでしょうか?
まさかReplaceを3連結したのは無関係ですよね?

Replace(" ",String.Empty).Replace(“全角スペース”,String.Empty).Replace(vbtab,String.Empty)

エラー発生時にローカルパネルで$exceptionDetailの中身を確認して、エラーの詳細内容を共有可能でしょうか?

初心者の質問ですが、エラー発生直前であればローカルパネルの情報は取れますが、エラー発生後は、ローカルパネルは消えてしまうため、情報が取れないのではないでしょうか?
ランタイム実行エラーの内容をクリップボードにコピーするのではだめでしょうか?
ご参考までに、下記がランタイム実行エラーの内容になります。

23.10.0+Branch.master.Sha.e038c5a32a4f890ba12a3c04ac465dc8811521e0

ソース: Framework_1

メッセージ: Exception has been thrown by the target of an invocation.

例外の型: System.Reflection.TargetInvocationException

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> System.ArgumentNullException: Value cannot be null. (Parameter ‘source’) at System.Data.DataTableExtensions.AsEnumerable(DataTable source)
at UiPathCodeRunner_7ff6887e7b1f4de2a80634ed1c12773e.Run(DataTable& o_dt_TransactionData)
— End of inner exception stack trace —
at System.RuntimeMethodHandle.InvokeMethod(Object target, Span1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args) at UiPath.Activities.System.Utilities.InvokeCode.CompilerRunner.Run(Object[] args) at UiPath.Activities.System.Utilities.InvokeCode.NetCodeInvoker.Run(String userCode, List1 inArgs, IEnumerable`1 imps, Object args)
at UiPath.Core.Activities.InvokeCode.Execute(CodeActivityContext context)
at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)
— End of stack trace from previous location —
at UiPath.Executor.BaseRunner.EndExecute(IAsyncResult result)
at UiPath.Executor.InProcessRunner.EndExecute(IAsyncResult result)
at UiPath.Core.Activities.ExecutorInvokeActivity.EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
at System.Activities.AsyncCodeActivity.System.Activities.IAsyncCodeActivity.FinishExecution(AsyncCodeActivityContext context, IAsyncResult result)
at System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)

デバッグモードで実行しているなら、エラーで停止した直後であれば取得可能です。(この時ワークフローは停止しないようにしてください)もし内容が表示されないようでしたらしばらく待ってみてください。(処理に時間がかかっているだけの可能性があります)

エラーメッセージからしますと、datatableがnullのようですので、正しくDataTableが渡されていないと思います。InvokeCodeの引数設定でただしく値を渡していますでしょうか?

dtの名前はo_dt_TransactionDataです。初心者の目から見ますとdtの引数設定情報に誤りは無いように見えますが、いかがでしょうか?

引数パネルのValueの部分にワークフロー上の変数を設定しなければ値は渡されませんので、こちらに変数を設定してください

Main.xamlから呼び出されたサブルーチン内でRead Rangeし、Invoke Codeアクティビティを実行しています。
o_dt_TransactionDataはMain.xamlからサブルーチンを呼び出す際に渡された引数のため、値はすでに入っていると思っていました。
いわば、変数のような引数です。
試しにMain.xamlで使っているdt_TransactionDataをValueに設定してもやはり同じエラーが出ました。どの値をValueに設定すればよいか、具体的にご教示ください。

こちらではわかりませんので、内容を書き換えたいDataTableの変数を設定してください。

もしこれを設定しても同じエラーが出るようでしたら、元の変数がnullの可能性があります。
上記と同様、デバッグ時実行時に、エラーで停止したらロカールパネルで内容を確認ください。

Valueに引数名o_dt_TransactionItemを設定してWFをデバッグするとエラーが出ませんでした。自ら発した"変数のような引数"という言葉がヒントになりました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.