格式字符串问题

时间:2015-04-24 18:48:20

标签: vb.net methods split

我在完成这项家庭作业时遇到了很多麻烦。如果可以的话请帮忙。

问题如下:

  

假设文本文件“degrees.txt”包含1981年和2011年在某些研究领域授予的学士学位数。该文件如下所示:

     
    

研究领域,1981,2011
    商务,200521,311574
    电脑和信息。科学,15121,54111
    教育,105074,105451
    工程,63642,64906
    社会科学与历史,100513,156892

  
     

编写一个程序,为用户提供以下选项。您的代码应该适用于任何文本文件,只要它遵循相同的格式:

     
    

字段名称1,1981年度数,2011年度数     字段名称2,1981年度数,2011年度数     ...

  
     

文本文件中的字段数未知。

     

a)在格式化的表格中显示文本文件的内容。“

当我编写程序时,它没有正确对齐。我的代码如下:

Public Class frmDegrees
    Dim degrees() As String = IO.File.ReadAllLines("Degrees.txt")

    Private Sub btnDegrees_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDegrees.Click
        Dim i As Integer
        Dim strfmt As String = "{0,-60}{1,10}{2,10}"
        Dim fields(3) As String

        For i = 0 To degrees.Count - 1
            fields = Split(degrees(i), ",")
            lstDegrees.Items.Add(String.Format(strfmt, fields(0), fields(1), fields(2)))
        Next
    End Sub
End Class

请让我知道我做错了什么。

2 个答案:

答案 0 :(得分:0)

您可以在表单中添加DataGridView,然后将表格插入其中。 DataGridView会有一个名为AutoSizeColumnsMode的属性,您可以将其设置为AllCells。而且,如果您想将数字对齐,您可以将列Alignment的{​​{1}}属性设置为DefaultCellStyle

MiddleRight

答案 1 :(得分:0)

我认为你可能已经完成了格式化任务 - 你的问题在于ListBox - 一个可怕的发明IMO。

亚当的回答可能是最好的,如果您要在网格中查看数据 - 这将是我选择的UI。

以下是一些显示格式化字符串的代码,但它取决于所使用的固定宽度字体。您可以将输出发送到具有多行属性集的TextBox,而不是debug.print。此代码使用List(String)的数据类型,而不是ListBox。

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim sData As String = "Field of Study,1981,2011|"  ' use | to delimit rows
        sData &= "  Business,200521,311574|"
        sData &= "  Computer and Info. Science,15121,54111|"
        sData &= "  Education,105074,105451|"
        sData &= "  Engineering,63642,64906|"
        sData &= "  Social Sciences and History,100513,156892"
        Dim strfmt As String = "{0,-60}{1,10}{2,10}"
        Dim lstData As New List(Of String)

        Dim aData() As String = sData.Split("|") ' build array of rows
        Dim aRow() As String
        For Each s In aData
            aRow = s.Split(",") ' split into fields
            'Debug.Print(String.Format(strfmt, aRow)) ' aRow is an array
            'Debug.Print(String.Format(strfmt, aRow(0), aRow(1), aRow(2))) ' same as above with individual argments
            lstData.Add(String.Format(strfmt, aRow))
        Next
        Debug.Print(String.Join(vbNewLine, lstData))
        Stop
    End Sub