• Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.
  • The forums have been upgraded with support for dark mode. By default it will follow the setting on your system/browser. You may override it by scrolling to the end of the page and clicking the gears icon.

Visual Basic

Joined
Dec 22, 2007
Messages
184 (0.03/day)
Location
Central Nebraska
System Name CORSAIR
Processor AMD Phenom 1090T x6 @3.2
Motherboard Gigabyte Ga-78LMT-S2P
Cooling High efficiency dust cooling
Memory 8GB GSkill DDR3 1333
Video Card(s) Sapphire Radeon HD3870 512MB GDDR4 PCI-e toxic
Storage Seagate SV35.3 ST3250310SV 250GB SATAII(Windows 7 Pro x64), 320GB Samsung SATAII(Storage and SuSE)
Display(s) Dell 20" LCD, Dell 17" LCD
Power Supply Antec Cool Blue 650W Modular
Software Windows 7 Professional SP1, Visual Studio 2010 Ultimate
Me and a buddy have an assignment to write a program in visual basic that allows you to calculate interest, etc. on a loan. We've been sitting for hours tryign to figure out streamwriter because the program must also be able to save the input to the text boxes used to calculate the loan info to a text file.
If anyone could tell us the error of our ways, it would be much appreciated

Imports System.IO
Public Class Console_MAIN

Private Sub Console_MAIN_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
'closes the program
Me.Close()
End Sub

Private Sub Button_Exit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Exit.Click
'closes the program
Me.Close()
End Sub

Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click
AboutBox1.Show()
End Sub

Private Sub Button_UpdateSchedule_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_UpdateSchedule.Click
Dim VAR_LoanAmount As Decimal
Dim VAR_LoanRate As String
Dim VAR_LoanPeriod As Decimal
Dim LoanInfo As StreamWriter

VAR_LoanAmount = TextBox_LoanAmount.Text
VAR_LoanRate = ComboBox_AnnualRate.Text
VAR_LoanPeriod = TextBox_Years.Text
LoanInfo = New IO.StreamWriter("loaninfo.txt", True)

Try
LoanInfo.WriteLine(Now())
LoanInfo.Write(VAR_LoanAmount, VAR_LoanRate, VAR_LoanPeriod)
LoanInfo.WriteLine()
LoanInfo.WriteLine()
Catch
MessageBox.Show("Error writing file")
End Try
End Sub
End Class

This has resulted in a blank text file, and if you click the button again, it crashes the program. Please help!
 
It's been a couple years since I did anything in VB but I'd try a couple things.

You'll definitely want to add this line below your last "WriteLine()" statement:
Code:
LoanInfo.[url="http://msdn.microsoft.com/en-us/library/system.io.streamwriter.flush(VS.80).aspx"]Flush[/url]()

And/Or you can try this:
http://msdn.microsoft.com/en-us/library/hxwfzt61(v=VS.90).aspx

Either way about it you should remember to close the file
 
Last edited:
shuggans, I believe you meant to say the program must also be able to save the input to from the text boxes used to calculate the loan info and write to a text file


I would avoid using the IO.StreamWriter class and use the StreamWriter class like below. Make sure you have Imports System.IO at the top of all of your code.

try this -

Code:
    Public Sub WriteSerials()
        Using Writer As New StreamWriter(selectedSystem + ".txt", False)
            For k = 0 To lsbDisplay.Items.Count - 1
                Writer.Write(systemSerials(k).systemSerial + ",")
                Writer.Write(systemSerials(k).boughtFrom + ",")
                Writer.Write(systemSerials(k).tradeDate + ",")
                Writer.Write(systemSerials(k).employee + ",")
                Writer.WriteLine()
            Next
            Writer.Write(systemSerial + ",")
            Writer.Write(boughtFrom + ",")
            Writer.Write(Now.Date + ",")
            Writer.Write(employee + ",")
        End Using
        '  Array.Clear(systemSerials, 0, systemSerials.Length)
    End Sub

This is code from a program I wrote but I know this method works. When you create your Streamwriter object put the location of your txt file you want to write to.

Basically try this -

Code:
Using Writer As New Streamwriter("C:\nameoftext.txt", False)

End Using

Or try this -

Code:
Using Writer As New Streamwriter("C:\nameoftext.txt", True)

End Using
 
Last edited:
Code:
    Private Sub Button_UpdateSchedule_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_UpdateSchedule.Click
        Dim VAR_LoanAmount As Decimal
        Dim VAR_LoanRate As String
        Dim VAR_LoanPeriod As Decimal
        Dim LoanInfo As StreamWriter

        VAR_LoanAmount = TextBox_LoanAmount.Text
        VAR_LoanRate = ComboBox_AnnualRate.Text
        VAR_LoanPeriod = TextBox_Years.Text
        LoanInfo = New IO.StreamWriter("loaninfo.txt", True)

        Try
            LoanInfo.WriteLine(Now())
            LoanInfo.Write(VAR_LoanAmount, VAR_LoanRate, VAR_LoanPeriod)
            LoanInfo.WriteLine()
            LoanInfo.WriteLine()
        Catch
            MessageBox.Show("Error writing file")
        End Try
    End Sub
There's a few problems here. First, a StreamWriter handles only strings so it doesn't make sense to convert everything to a different type and then back to string again.

Second, as streetfighter 2 pointed out, you need to Flush() it (commits the data in the buffer to the hard drive).

Thirdly, after you are done with a file, you must Close() it (ending the stream).

Fourthly, there is no StreamWriter.Write() method that accepts Write(decimal, string, decimal) for arguments.

Code with those changes implemented:
Code:
    Private Sub Button_UpdateSchedule_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_UpdateSchedule.Click
        Dim LoanInfo As StreamWriter = New IO.StreamWriter("loaninfo.txt", True) ' Declare and instaniate on one line
        Try
            LoanInfo.WriteLine(Now())
            LoanInfo.WriteLine(TextBox_LoanAmount.Text)
            LoanInfo.WriteLine(VAR_LoanRate.Text)
            LoanInfo.WriteLine(VAR_LoanPeriod.Text)
            LoanInfo.Flush() ' Commit changes to file.
        Catch
            MessageBox.Show("Error writing file")
        End Try
        LoanInfo.Close() ' Free the file stream.
    End Sub



I would avoid using the IO.StreamWriter class and use the StreamWriter class like below. Make sure you have Imports System.IO at the top of all of your code.
They are the same thing. How you reference is programmer preference. I tend to do a lot of importing while others may not.


Basically try this -

Code:
Using Writer As New Streamwriter("C:\nameoftext.txt", False)

End Using

Or try this -

Code:
Using Writer As New Streamwriter("C:\nameoftext.txt", True)

End Using
The boolean value at the end is for appending (true/false). Default is false (zero-lengths the file when the stream is opened).
 
Last edited:
There's a few problems here. First, a StreamWriter handles only strings so it doesn't make sense to convert everything to a different type and then back to string again.

Second, as streetfighter 2 pointed out, you need to Flush() it (commits the data in the buffer to the hard drive).

Thirdly, after you are done with a file, you must Close() it (ending the stream).

Fourthly, there is no StreamWriter.Write() method that accepts Write(decimal, string, decimal) for arguments.

Code with those changes implemented:
Code:
    Private Sub Button_UpdateSchedule_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_UpdateSchedule.Click
        Dim LoanInfo As StreamWriter = New IO.StreamWriter("loaninfo.txt", True) ' Declare and instaniate on one line
        Try
            LoanInfo.WriteLine(Now())
            LoanInfo.WriteLine(TextBox_LoanAmount.Text)
            LoanInfo.WriteLine(VAR_LoanRate.Text)
            LoanInfo.WriteLine(VAR_LoanPeriod.Text)
            LoanInfo.Flush() ' Commit changes to file.
        Catch
            MessageBox.Show("Error writing file")
        End Try
        LoanInfo.Close() ' Free the file stream.
    End Sub




They are the same thing. How you reference is programmer preference. I tend to do a lot of importing while others may not.



The boolean value at the end is for appending (true/false). Default is false (zero-lengths the file when the stream is opened).

This worked great! Thanks so much!
 
Back
Top