locked
Reading a text file RRS feed

  • Question

  • User-1551254158 posted

    I have a fixed width delimited text file, the data spans over several line. I do not know how to approach in reading this file and displaying its results to a gridview.  Any assistance would be great.

     

    Thanks.

    Monday, January 25, 2010 12:19 PM

Answers

  • User1006193418 posted

    Hi,

    I finally worked out something like this. You can directly copy it to Button3.Click event handler to have a try.

    Protected Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
        Dim dt As New DataTable
        Dim dr As DataRow = dt.NewRow()
        Dim myArray() As String
    
        dt.Columns.Add("Payee Name", Type.GetType("System.String"))
        dt.Columns.Add("Payee Address", Type.GetType("System.String"))
        dt.Columns.Add("Payee City State", Type.GetType("System.String"))
        dt.Columns.Add("Claim Number", Type.GetType("System.String"))
        dt.Columns.Add("Service Dates", Type.GetType("System.String"))
        dt.Columns.Add("Type", Type.GetType("System.String"))
        dt.Columns.Add("Amount", Type.GetType("System.String"))
        dt.Columns.Add("Due Date", Type.GetType("System.String"))
        dt.Columns.Add("Invoice Number", Type.GetType("System.String"))
        dt.Columns.Add("Adjuster Code", Type.GetType("System.String"))
        dt.Columns.Add("Employee Name", Type.GetType("System.String"))
    
        Try
    
            If FileUpload1.HasFile Then
                FileUpload1.SaveAs(Server.MapPath("file.txt"))
            End If
    
            Dim line() As String = File.ReadAllLines(Server.MapPath("file.txt"))
    
            dr("Payee Name") = line(31)
            dr("Payee Address") = line(32)
            dr("Payee City State") = line(33)
    
            Dim split() As Char = {" "c}
            myArray = line(34).Split(split, StringSplitOptions.RemoveEmptyEntries)
    
            dr("Claim Number") = myArray(44)
            dr("Service Dates") = myArray(51)
            dr("Type") = myArray(52)
            dr("Amount") = myArray(57)
            dr("Due Date") = myArray(58)
            dr("Invoice Number") = myArray(59)
    
            myArray = line(35).Split(split, StringSplitOptions.RemoveEmptyEntries)
            dr("Adjuster Code") = myArray(37)
            dr("Employee Name") = myArray(38) & " " & myArray(39)
    
            dt.Rows.Add(dr)
    
        Catch ex As Exception
            'lblError.Text = "The file could not be processed. The following Error occurred: " & ex.Message   
        End Try
    
        GridView1.DataSource = dt
        GridView1.DataBind()
    
    End Sub

    Actually, I assume the text you posted here doesn't meet this code. Could you tell me the content in line35 and line34? They should be very long as there are at least 60 words.

    Best Regards,
    Shengqing Yang

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Wednesday, February 3, 2010 1:49 AM
  • User1006193418 posted

    Hi,

    Please have a try on this demo I worked out eventually.

        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Dim datafile As New StreamReader(Server.MapPath("11510.txt"))
    
            Dim dt As New DataTable
            Dim dataline As String
            Dim split() As Char = {" "c}
            Dim dataitems() As String
    
            dt.Columns.Add("Vendor Code", Type.GetType("System.String"))
            dt.Columns.Add("Vendor IRS Number", Type.GetType("System.String"))
            dt.Columns.Add("Narrative Code", Type.GetType("System.String"))
            dt.Columns.Add("Account Number", Type.GetType("System.String"))
            dt.Columns.Add("Vendor Name", Type.GetType("System.String"))
            dt.Columns.Add("Vendor AddressLine1", Type.GetType("System.String"))
            dt.Columns.Add("Vendor AddressLine2", Type.GetType("System.String"))
            dt.Columns.Add("Claim Number", Type.GetType("System.String"))
            dt.Columns.Add("Service From - Thru", Type.GetType("System.String"))
            dt.Columns.Add("Pay Type", Type.GetType("System.String"))
            dt.Columns.Add("Payment Amount", Type.GetType("System.String"))
            dt.Columns.Add("Payment Due Date", Type.GetType("System.String"))
            dt.Columns.Add("Invoice Number", Type.GetType("System.String"))
            dt.Columns.Add("Payment Status", Type.GetType("System.String"))
            dt.Columns.Add("Adjuster Code", Type.GetType("System.String"))
            dt.Columns.Add("Employee Name", Type.GetType("System.String"))
            dt.Columns.Add("Invoice Date", Type.GetType("System.String"))
    
            While Not datafile.EndOfStream
                dataline = datafile.ReadLine()
                If Not dataline.StartsWith("VENDOR CODE") Then
                    Continue While
                End If
    
                Dim dr As DataRow = dt.NewRow()
    
                '1st line
                dataitems = dataline.Split(split, StringSplitOptions.RemoveEmptyEntries)
    
                dr("Vendor Code") = dataitems(2)
                dr("Vendor IRS Number") = dataitems(5)
    
                If dataitems.Length > 7 Then
                    dr("Narrative Code") = dataitems(8)
                End If
    
                '2nd line
                dataitems = datafile.ReadLine().Split(split, StringSplitOptions.RemoveEmptyEntries)
                dr("Account Number") = dataitems(1)
    
                '3rd line
                dr("Vendor Name") = datafile.ReadLine().Trim()
    
                '4th line
                dr("Vendor AddressLine1") = datafile.ReadLine().Trim()
    
                '5th line
                dr("Vendor AddressLine2") = datafile.ReadLine().Trim()
    
                '6th line payment(s)
                dataline = datafile.ReadLine()
                If Not dataline.StartsWith(" ") Then
                    dataline = datafile.ReadLine()
                End If
    
                While Not dataline.Trim() = ""
                    dataitems = dataline.Split(split, StringSplitOptions.RemoveEmptyEntries)
    
                    dr("Claim Number") = dataitems(0)
                    dr("Service From - Thru") = dataitems(1)
                    dr("Pay Type") = dataitems(2)
                    dr("Payment Amount") = dataitems(3)
                    dr("Payment Due Date") = dataitems(4)
    
                    If dataitems.Length > 7 Then
                        dr("Invoice Number") = dataitems(6)
                        dr("Payment Status") = dataitems(7)
                    ElseIf dataitems.Length > 6 Then
                        dr("Invoice Number") = dataitems(5)
                        dr("Payment Status") = dataitems(6)
                    Else
                        dr("Payment Status") = dataitems(5)
                    End If
    
                    dataitems = datafile.ReadLine().Split(split, StringSplitOptions.RemoveEmptyEntries)
                    dr("Adjuster Code") = dataitems(0)
                    dr("Employee Name") = dataitems(1) & " " & dataitems(2)
    
                    If dataitems.Length > 3 Then
                        dr("Invoice Date") = dataitems(3)
                    End If
    
                    dataline = datafile.ReadLine()
                    If dataline.Trim() = "BATCH 0000" Then
                        dataline = datafile.ReadLine()
                    End If
    
                    If dr("Vendor Code") Is DBNull.Value Then
                        Dim tempdr = dt.Rows(dt.Rows.Count - 1)
                        dr("Vendor Code") = tempdr("Vendor Code")
                        dr("Vendor IRS Number") = tempdr("Vendor IRS Number")
                        dr("Narrative Code") = tempdr("Narrative Code")
                        dr("Account Number") = tempdr("Account Number")
                        dr("Vendor Name") = tempdr("Vendor Name")
                        dr("Vendor AddressLine1") = tempdr("Vendor AddressLine1")
                        dr("Vendor AddressLine2") = tempdr("Vendor AddressLine2")
                    End If
    
                    dt.Rows.Add(dr)
                    dr = dt.NewRow()
    
                End While
    
                GridView1.DataSource = dt
                GridView1.DataBind()
    
            End While
        End Sub

    Best Regards,
    Shengqing Yang

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Sunday, February 7, 2010 9:40 PM

All replies

  • User-925904572 posted

    If it's delimited than you know the lengh of each field so parsing should not be a proble, unless you have a specific issue here.

     

    Once you are able to parse it into records, just get that data into a DataTable then bind it with your GridView.

     

    Post some spcific places in code that you can't figure out an I am sure that we can solve this for you. 

    Tuesday, January 26, 2010 1:01 PM
  • User-1551254158 posted

    Listed below is a sample of the text. I want to skip the top 21 lines and read the data spanning over lines 22 - 28, then skip 29 - 40 and read next set..and so forth. The lines are fixed where the data resides.

    Thank you for your assistance.

     

    CAS INV RP (Landscape)
    
    00962  Some Company                                                                     INVOICE REPORT PRINT
                                                   AS OF 01/15/09           PAGE   1
    
                                * I N V O I C E   P R I N T   S E L E C T I O N S *
                                *  * * * * * * * * * * * * * * * * * * * * * * *
                            CLAIM KEY CODE
                            COVERAGE CODE
                            CARRIER CODE
                            ADJUSTER CODE
                            
    
                                   PRINT ORDER: ACCOUNT
                                       SORT BY: CLAIM NUMBER
    00962  Some Company                                                                     INVOICE REPORT PRINT
                                                   AS OF 01/15/09           PAGE   2
    
    VENDOR - PAYEE NAME / ADDRESS LINES      --CLAIM  NUMBER--       SERVICE DATES   TYPE    AMOUNT   DUE DATE INVOICE NUMB  AMT.CHRGD S
                                             --EMPLOYEE NAME--        FROM - THRU                                 DATE                 T
    
    VENDOR CODE 0065558  PPI NO. 11-3445263                             NARR. I     $I INVOICE NUMBER
                                                                 ACCOUNT 00962
    HERMAN MUNSTER AND ASSOC.
    1313 MOCKINGBIRD AVENUE   SUITE 555
    ROCKVILLE CENTRE               NY 11570
                                                /0000011797/       12/08/08-12/08/08 20-02     35.00 01/15/09 48429                   O
                                         ADJ.RM99 DINGOO, PATRIC
                                                 BATCH 0000
    
                                                                           ITEMS:    1        135.00
    Tuesday, January 26, 2010 3:29 PM
  • User1006193418 posted

    I want to skip the top 21 lines and read the data spanning over lines 22 - 28, then skip 29 - 40 and read next set..and so forth. The lines are fixed where the data resides.

    Hi,

    Please have a try on this code to see if it works for you.

    Dim input As New StreamReader("file.txt")
    Dim index As Integer = 0
    Dim output As New StringBuilder
    Dim line As String
    
    
    While Not input.EndOfStream
        index += 1
        line = input.ReadLine()
    
        If index >= 22 AndAlso index <= 28 Then
            output.AppendLine(line)
        End If
    
        If index >= 41 Then
            output.AppendLine(line)
        End If
    End While

    Best Regards,
    Shengqing Yang

    Sunday, January 31, 2010 10:32 PM
  • User-1551254158 posted

    Thank you Shengqing Yang for your help.  For some unknown reason I am not getting an output when I try to view each read in a textbox. However, I have pieced together some code that gets the desired output, but I cam read beyond the first record. Your guidance would be appreciated.

    Thanks.

     

    Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~        
            Dim dsTemp As DataSet = New DataSet
            Dim dTbl As New DataTable
            Dim dr As DataRow = dTbl.NewRow()
    
            dTbl.Columns.Add("Payee Name", Type.GetType("System.String"))
            dTbl.Columns.Add("Payee Address", Type.GetType("System.String"))
            dTbl.Columns.Add("Payee City State", Type.GetType("System.String"))
            dTbl.Columns.Add("Claim Number", Type.GetType("System.String"))
            dTbl.Columns.Add("Service Dates", Type.GetType("System.String"))
            dTbl.Columns.Add("Type", Type.GetType("System.String"))
            dTbl.Columns.Add("Amount", Type.GetType("System.String"))
            dTbl.Columns.Add("Due Date", Type.GetType("System.String"))
            dTbl.Columns.Add("Invoice Number", Type.GetType("System.String"))
            dTbl.Columns.Add("Adjuster Code", Type.GetType("System.String"))
            dTbl.Columns.Add("Employee Name", Type.GetType("System.String"))
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       
    
            'Dim myArr(3) As String
    
            Dim myArray() As String
            Dim myArray2() As String
    
            If FileUpload1.HasFile Then
    
                Try
                    Dim theStream As Stream = FileUpload1.PostedFile.InputStream
    
                    Using sr As New StreamReader(theStream)
    
                        Dim line As String
    
                        ListBox2.Items.Clear()
    
                        Dim i As Integer
    
                        dr = dTbl.NewRow()
    
                        For i = 1 To 31
                            sr.ReadLine()
                        Next
    
                        For i = 32 To 36
                            line = sr.ReadLine
    
                            If i = 32 Then
    
                                dr("Payee Name") = line
                                ListBox2.Items.Add(line)
                            ElseIf i = 33 Then
    
                                dr("Payee Address") = line
                                ListBox2.Items.Add(line)
                            ElseIf i = 34 Then
    
                                dr("Payee City State") = line
                                ListBox2.Items.Add(line)
                            ElseIf i = 35 Then
                                myArray = Split(line, " "c)
    
                                dr("Claim Number") = myArray(44)
                                dr("Service Dates") = myArray(51)
                                dr("Type") = myArray(52)
                                dr("Amount") = myArray(57)
                                dr("Due Date") = myArray(58)
                                dr("Invoice Number") = myArray(59)
    
                            ElseIf i = 36 Then
                                myArray2 = Split(line, " "c)
    
                                ListBox2.Items.Add(myArray2(37))
                                ListBox2.Items.Add(myArray2(38) & " " & myArray2(39))
    
                                dr("Adjuster Code") = myArray2(37)
                                dr("Employee Name") = myArray2(38) & " " & myArray2(39)
                            End If
    
                        Next
    
                        dTbl.Rows.Add(dr)
    
                    End Using
    
                Catch ex As Exception
                    lblError.Text = "The file could not be processed. The following Error occurred: " & ex.Message
                End Try
            Else
                lblFileError.Text = "No File! Select a file and try again!"
            End If
    
            GridView1.DataSource = dTbl
            GridView1.DataBind()
    
        End Sub


     

     

     

     

    Sunday, January 31, 2010 11:13 PM
  • User1006193418 posted

    Hi,

    At line 83 in your code. Maybe you should embed the statement dTbl.Rows.Add(dr) into the for loop, like move it to line 80.

    Also, at line 40. As the first 31 lines need to be passed, it will be better if you would move this into for loop too.

    Using sr As New StreamReader(theStream)
        Dim line As String
        ListBox2.Items.Clear()
    
        Dim i As Integer
        For i = 1 To 31
            sr.ReadLine()
        Next
    
        For i = 32 To 36
            dr = dTbl.NewRow()      'here
            line = sr.ReadLine
    
            If i = 32 Then
                dr("Payee Name") = line
                ListBox2.Items.Add(line)
    
            ElseIf i = 33 Then
                '...
                '...
            End If
    
            dTbl.Rows.Add(dr)       'here
        Next
    
    End Using

    Best Regards,
    Shengqing Yang

    Monday, February 1, 2010 2:54 AM
  • User-1551254158 posted

    Thanks for the suggestion Shengqing, but moving  'dr = dTbl.NewRow()' and  'dTbl.Rows.Add(dr)' in to the loop will cause each line being read to be inserted on a new row.

    My dilema is...the data being read (see above example) has a header section (top 31 lines) and a footer section (8 lines after last field). I am unsure how to approach skipping the next 8 lines and reading the next row of data, and so forth till the end of the file. I wish the file contained a specific number of records, so i could just hard code it. But, real world scenrio sucks :-).  Any other suggestions. Thanks again for your assistance.

    Monday, February 1, 2010 10:10 AM
  • User1006193418 posted

    Hi,

    So, here what you did in the code, that reading from first line to 36th line, is only for one row in DataTable?

    Is the ListBox in your code just for testing whether the header fetched from text file is correct?

    It seems that I have totally misunderstood you before. I feel sorry for that and I will do some test today and follow here before tomorrow.

    Best Regards,
    Shengqing Yang

    Tuesday, February 2, 2010 6:19 AM
  • User-1551254158 posted

    Yes, the listbox is being used for testing purposes to view what each line being read is. 

    Shengqing, thank you so much for your effort. I can email you a sample of the text file if would help.

     

     

    Tuesday, February 2, 2010 10:26 AM
  • User1006193418 posted

    Hi,

    I finally worked out something like this. You can directly copy it to Button3.Click event handler to have a try.

    Protected Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
        Dim dt As New DataTable
        Dim dr As DataRow = dt.NewRow()
        Dim myArray() As String
    
        dt.Columns.Add("Payee Name", Type.GetType("System.String"))
        dt.Columns.Add("Payee Address", Type.GetType("System.String"))
        dt.Columns.Add("Payee City State", Type.GetType("System.String"))
        dt.Columns.Add("Claim Number", Type.GetType("System.String"))
        dt.Columns.Add("Service Dates", Type.GetType("System.String"))
        dt.Columns.Add("Type", Type.GetType("System.String"))
        dt.Columns.Add("Amount", Type.GetType("System.String"))
        dt.Columns.Add("Due Date", Type.GetType("System.String"))
        dt.Columns.Add("Invoice Number", Type.GetType("System.String"))
        dt.Columns.Add("Adjuster Code", Type.GetType("System.String"))
        dt.Columns.Add("Employee Name", Type.GetType("System.String"))
    
        Try
    
            If FileUpload1.HasFile Then
                FileUpload1.SaveAs(Server.MapPath("file.txt"))
            End If
    
            Dim line() As String = File.ReadAllLines(Server.MapPath("file.txt"))
    
            dr("Payee Name") = line(31)
            dr("Payee Address") = line(32)
            dr("Payee City State") = line(33)
    
            Dim split() As Char = {" "c}
            myArray = line(34).Split(split, StringSplitOptions.RemoveEmptyEntries)
    
            dr("Claim Number") = myArray(44)
            dr("Service Dates") = myArray(51)
            dr("Type") = myArray(52)
            dr("Amount") = myArray(57)
            dr("Due Date") = myArray(58)
            dr("Invoice Number") = myArray(59)
    
            myArray = line(35).Split(split, StringSplitOptions.RemoveEmptyEntries)
            dr("Adjuster Code") = myArray(37)
            dr("Employee Name") = myArray(38) & " " & myArray(39)
    
            dt.Rows.Add(dr)
    
        Catch ex As Exception
            'lblError.Text = "The file could not be processed. The following Error occurred: " & ex.Message   
        End Try
    
        GridView1.DataSource = dt
        GridView1.DataBind()
    
    End Sub

    Actually, I assume the text you posted here doesn't meet this code. Could you tell me the content in line35 and line34? They should be very long as there are at least 60 words.

    Best Regards,
    Shengqing Yang

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Wednesday, February 3, 2010 1:49 AM
  • User1006193418 posted

    Hi,

    Please have a try on this demo I worked out eventually.

        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
            Dim datafile As New StreamReader(Server.MapPath("11510.txt"))
    
            Dim dt As New DataTable
            Dim dataline As String
            Dim split() As Char = {" "c}
            Dim dataitems() As String
    
            dt.Columns.Add("Vendor Code", Type.GetType("System.String"))
            dt.Columns.Add("Vendor IRS Number", Type.GetType("System.String"))
            dt.Columns.Add("Narrative Code", Type.GetType("System.String"))
            dt.Columns.Add("Account Number", Type.GetType("System.String"))
            dt.Columns.Add("Vendor Name", Type.GetType("System.String"))
            dt.Columns.Add("Vendor AddressLine1", Type.GetType("System.String"))
            dt.Columns.Add("Vendor AddressLine2", Type.GetType("System.String"))
            dt.Columns.Add("Claim Number", Type.GetType("System.String"))
            dt.Columns.Add("Service From - Thru", Type.GetType("System.String"))
            dt.Columns.Add("Pay Type", Type.GetType("System.String"))
            dt.Columns.Add("Payment Amount", Type.GetType("System.String"))
            dt.Columns.Add("Payment Due Date", Type.GetType("System.String"))
            dt.Columns.Add("Invoice Number", Type.GetType("System.String"))
            dt.Columns.Add("Payment Status", Type.GetType("System.String"))
            dt.Columns.Add("Adjuster Code", Type.GetType("System.String"))
            dt.Columns.Add("Employee Name", Type.GetType("System.String"))
            dt.Columns.Add("Invoice Date", Type.GetType("System.String"))
    
            While Not datafile.EndOfStream
                dataline = datafile.ReadLine()
                If Not dataline.StartsWith("VENDOR CODE") Then
                    Continue While
                End If
    
                Dim dr As DataRow = dt.NewRow()
    
                '1st line
                dataitems = dataline.Split(split, StringSplitOptions.RemoveEmptyEntries)
    
                dr("Vendor Code") = dataitems(2)
                dr("Vendor IRS Number") = dataitems(5)
    
                If dataitems.Length > 7 Then
                    dr("Narrative Code") = dataitems(8)
                End If
    
                '2nd line
                dataitems = datafile.ReadLine().Split(split, StringSplitOptions.RemoveEmptyEntries)
                dr("Account Number") = dataitems(1)
    
                '3rd line
                dr("Vendor Name") = datafile.ReadLine().Trim()
    
                '4th line
                dr("Vendor AddressLine1") = datafile.ReadLine().Trim()
    
                '5th line
                dr("Vendor AddressLine2") = datafile.ReadLine().Trim()
    
                '6th line payment(s)
                dataline = datafile.ReadLine()
                If Not dataline.StartsWith(" ") Then
                    dataline = datafile.ReadLine()
                End If
    
                While Not dataline.Trim() = ""
                    dataitems = dataline.Split(split, StringSplitOptions.RemoveEmptyEntries)
    
                    dr("Claim Number") = dataitems(0)
                    dr("Service From - Thru") = dataitems(1)
                    dr("Pay Type") = dataitems(2)
                    dr("Payment Amount") = dataitems(3)
                    dr("Payment Due Date") = dataitems(4)
    
                    If dataitems.Length > 7 Then
                        dr("Invoice Number") = dataitems(6)
                        dr("Payment Status") = dataitems(7)
                    ElseIf dataitems.Length > 6 Then
                        dr("Invoice Number") = dataitems(5)
                        dr("Payment Status") = dataitems(6)
                    Else
                        dr("Payment Status") = dataitems(5)
                    End If
    
                    dataitems = datafile.ReadLine().Split(split, StringSplitOptions.RemoveEmptyEntries)
                    dr("Adjuster Code") = dataitems(0)
                    dr("Employee Name") = dataitems(1) & " " & dataitems(2)
    
                    If dataitems.Length > 3 Then
                        dr("Invoice Date") = dataitems(3)
                    End If
    
                    dataline = datafile.ReadLine()
                    If dataline.Trim() = "BATCH 0000" Then
                        dataline = datafile.ReadLine()
                    End If
    
                    If dr("Vendor Code") Is DBNull.Value Then
                        Dim tempdr = dt.Rows(dt.Rows.Count - 1)
                        dr("Vendor Code") = tempdr("Vendor Code")
                        dr("Vendor IRS Number") = tempdr("Vendor IRS Number")
                        dr("Narrative Code") = tempdr("Narrative Code")
                        dr("Account Number") = tempdr("Account Number")
                        dr("Vendor Name") = tempdr("Vendor Name")
                        dr("Vendor AddressLine1") = tempdr("Vendor AddressLine1")
                        dr("Vendor AddressLine2") = tempdr("Vendor AddressLine2")
                    End If
    
                    dt.Rows.Add(dr)
                    dr = dt.NewRow()
    
                End While
    
                GridView1.DataSource = dt
                GridView1.DataBind()
    
            End While
        End Sub

    Best Regards,
    Shengqing Yang

    • Marked as answer by Anonymous Thursday, October 7, 2021 12:00 AM
    Sunday, February 7, 2010 9:40 PM
  • User-1551254158 posted

    Shengqing,

    Thank you for your assistance.  

    Monday, February 8, 2010 5:16 PM