# Visual Basic



## shuggans (Dec 10, 2010)

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!


----------



## streetfighter 2 (Dec 10, 2010)

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:

```
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


----------



## Ross211 (Dec 10, 2010)

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 -


```
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 -


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

End Using
```

Or try this - 


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

End Using
```


----------



## FordGT90Concept (Dec 10, 2010)

shuggans said:


> ```
> 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
> ...


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:

```
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
```





Ross211 said:


> *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.




Ross211 said:


> Basically try this -
> 
> 
> ```
> ...


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


----------



## shuggans (Dec 10, 2010)

FordGT90Concept said:


> 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).
> 
> ...



This worked great!  Thanks so much!


----------

