0

我正在使用一个名为 BluePrism 的机器人程序来自动读取、解释并最终在大型机应用程序中工作。大型机应用程序已过时,其会话文件与 BluePrism 不兼容。如果是这样,我就不会尝试我将要向您展示/询问您的内容。

既然我们不能使用 BluePrism 中内置的屏幕阅读功能,为什么不让机器人将整个屏幕复制为文本呢?我想,文本操作在这里会很好用。

无论如何,我让机器人复制屏幕,我可以从剪贴板获取屏幕。没问题。我什至在 DataTable 中有屏幕(BluePrism 将它们称为集合,但对象相同),其中每一行都是屏幕中的一行。惊人的。

好吧,现在这是我尝试执行但失败的代码的问题。我想使用 TextFieldParser 和 FixedWidth 拆分该 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

我知道 TextFieldParser 正在工作,因为我可以将字符串数组 colFields 输出到文本文件,并且我得到了刚刚复制回给我的屏幕部分。所以 for 循环R.Item(i) = colFields(i)中的步骤没有按预期工作,或者 addSplitScrnSectColl.Rows.Add(R)没有工作。虽然没有错误。只是一个空白的数据表。任何帮助,将不胜感激。

ScrnSectColl 是输入数据表,由屏幕上的文本行组成。SplitScrnSectColl 是 7 列全文本的输出 DataTable。

4

1 回答 1

0
Dim workTable As New DataTable
workTable.Columns.Add("InvNum", GetType(String))
workTable.Columns.Add("BatchNum", GetType(String))
workTable.Columns.Add("InvDate", GetType(String))
workTable.Columns.Add("PO_Num", GetType(String))
workTable.Columns.Add("InvTot", GetType(String))
workTable.Columns.Add("OpenAmt", GetType(String))
workTable.Columns.Add("PayDate", GetType(String))

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 = workTable.NewRow()
                For i As Integer = 0 To workTable.Columns.Count - 1
                    R.Item(i) = colFields(i)
                Next
                workTable.Rows.Add(R)
            End Using
        End Using
    Next row
    SplitScrnSectColl = workTable
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

我定义了一个临时工作表,然后将其分配给输出 DataTable SplitScrnSectColl。有用!谢谢你。

于 2020-01-15T20:05:48.517 回答