2014-02-27 36 views
0

我正在编写一个Visual Basic程序,该程序读取名为profit.txt的文件的信息。我的形式具有被设置这样文件 - >打开文件 - 的菜单条>退出从Visual Basic中的文本文件中汇总值

,我停留在现在的节目的部分是这样的:

当用户选择文件 - >打开文件,出现一个打开的文件对话框。如果用户选择除profit.txt之外的任何内容,则会出现一个消息框,告诉他们不能使用该文件,而且没有其他任何操作。如果用户确实选择了profit.txt,那么将该文件中的所有值相加,但不要显示总和。

感谢下面的帮助,我可以打开文件,但不知道如何获得文件中所有元素的总和。直到用户单击某些单选按钮并在文本框中输入数量和复选框时才会显示总和。程序然后使用用户的信息来获得最终的利润,方法是从文件中的值总和中减去所给的金额。

这是我最近的代码。

Option Strict On 

    Imports System.IO 

    Public Class Form1 

      Private Sub menOpen_Click(sender As Object, e As EventArgs) Handles menOpen.Click 
     Dim ofd As New OpenFileDialog 
     ofd.Filter = "text files |*.txt|All Files|*.*" 
     ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 

     If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then 
      Dim selectedFileName As String = System.IO.Path.GetFileName(ofd.FileName) 
      If selectedFileName.ToLower = "profit.txt" Then 
       Dim line As String 
       Using reader As New StreamReader(ofd.OpenFile) 
        While Not reader.EndOfStream 
         line = reader.ReadLine 
         Console.WriteLine(line) 
        End While 
       End Using 
      Else 
       MessageBox.Show("You cannot use that file!") 
      End If 
     End If 
    End Sub 

    Private Sub menExit_Click(sender As Object, e As EventArgs) Handles menExit.Click 
     Me.Close() 
    End Sub 
End Class 

任何建议将不胜感激。

+1

如果你总是打开同一个文件,为什么让用户必须选择它?改为使用'For Each行作为字符串在File.ReadAllLines(menOpen.FileName)'中循环查看文件'。 – LarsTech

+1

(但使用'File.ReadLines'来代替;它是一个只能一次读取一行的生成器。) – Ryan

+0

对于桌面目录,请设置以下属性:'menOpen.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) '在调用ShowDialog()之前。 – LarsTech

回答

2

不要让您的OpenFileDialog与您的菜单具有相同的名称。您可以使用System.IO.Path.GetFileName()来检索文件名部分(无路径)。然后比较,对你的硬编码值:

Private Sub menOpen_Click(sender As Object, e As EventArgs) Handles menOpen.Click 
    Dim OFD As New OpenFileDialog 
    OFD.Filter = "text files |*.txt|All Files|*.*" 
    If OFD.ShowDialog() = Windows.Forms.DialogResult.OK Then 
     Dim selectedFileName As String = System.IO.Path.GetFileName(OFD.FileName) 
     If selectedFileName.ToLower = "profit.txt" Then 
      Dim line As String 
      Using reader As New StreamReader(OFD.OpenFile) 
       While Not reader.EndOfStream 
        line = reader.ReadLine 
        Console.WriteLine(line) 
       End While 
      End Using 
     Else 
      MessageBox.Show("You cannot use that file!") 
     End If 
    End If 
End Sub 

下面是使用Integer.Parse()在line字符串转换为数值的一个简单的例子:

Dim value As Integer 
    If Integer.TryParse(line, value) Then 
     total = total + value 
    End If 

显然你必须为文件中的每个“行”执行此操作,因此内部应该发生,While循环。你需要在循环外部声明total变量(和using语句),并且不要忘记在某处输出该总数。

+0

好的变量名称。 – LarsTech

+0

非常感谢!有关如何让程序获取文本文件中值的总和的任何建议? –

+0

使用Integer.Parse()将每一行值转换为一个数字值。声明一个变量来保存和,**在循环外部,并在转换它们时累积这些值。 –