私は BluePrism と呼ばれるロボティクス プログラムを使用して、メインフレーム アプリケーションでの読み取り、解釈、および最終的な作業を自動化しています。メインフレーム アプリケーションは古く、そのセッション ファイルは BluePrism と互換性がありません。もしそうなら、私はあなたに見せよう/あなたに尋ねようとしていることを試みていないでしょう.
BluePrism ではビルトインのスクリーン リーディングを使用できないため、ロボットに画面全体をテキストとしてコピーさせてみませんか? ここでは、テキスト操作がうまく機能すると思いました。
とにかく、ロボットに画面をコピーさせて、クリップボードから画面を取得できます。問題ない。各行が画面からの行である DataTable (BluePrism はコレクションと呼びますが、同じオブジェクト) にも画面があります。素晴らしい。
さて、ここに私がやろうとしているが失敗したコードでの質問があります。文字の区切り記号やスペースを使用できないため、TextFieldParser と FixedWidth を使用してその DataTable の各行を分割したいと考えています。次に、分割された行を新しい出力 DataTable に追加します。後で BluePrism で使用できるようにします。以下のコードがコンパイルされます。私はエラーをキャッチしません。未処理のものもありません。私が得るのは空の出力 DataTable ですが、正しい行数があります。論理エラーですが、私が間違っていたことがわかれば、私は気が滅入ります。
Dim colFields(6) As String
Dim line As String
line = ""
Try
For Each row As System.Data.DataRow In ScrnSectColl.Rows
line = row("Value")
Using stringline As New System.IO.StringReader(line)
Using reader As New Microsoft.VisualBasic.FileIO.TextFieldParser(stringline)
reader.TrimWhiteSpace = False
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
reader.SetFieldWidths(17, 9, 9, 17, 10, 10, 8)
colFields = reader.ReadFields()
Dim R As DataRow = SplitScrnSectColl.NewRow()
For i As Integer = 0 To SplitScrnSectColl.Columns.Count - 1
R.Item(i) = colFields(i)
Next
SplitScrnSectColl.Rows.Add(R)
End Using
End Using
Next row
Catch ex As Exception
TextParserFailed = True
'SplitScrnSectColl.Clear()
ErrorMessage = "Error: Text Field Parser failed " & System.Environment.NewLine & line & System.Environment.NewLine & "Original Error: " & ex.Message
End Try
文字列配列 colFields をテキスト ファイルに出力でき、先ほどコピーしたばかりの画面セクションを取得できるため、TextFieldParser が機能していることはわかっています。そのため、for ループ内のステップがR.Item(i) = colFields(i)
意図したとおりに機能していないか、追加SplitScrnSectColl.Rows.Add(R)
が機能していません。エラーはありませんが。空の DataTable だけです。どんな助けでも大歓迎です。
ScrnSectColl は、画面からのテキスト行で構成される入力 DataTable です。SplitScrnSectColl は、7 列のすべてのテキストの出力 DataTable です。