Sign in to follow this  
Renegadeandy

[.net] Carriage Return

Recommended Posts

Right here is the problem. I need to detect if a newline character is found at the end of my file. The file looks like this : 1,pencil,planet office,0.05,1,20 10,black pen,ribo,0.1,5,15 11,blue pen,ribo,0.1,6,8 12,red pen,ribo,0.12,8,3 1015,refill pad (lined),planet office,1,0,50 1016,refill pad (blank),pads are us,1.2,2,5 Its a csv file, so am reading char by char till a "," is found. I get to 20 at the end of the first line, then need to detect the carriage return. A portion of example code is :
  If count = 5 Then
            character = ChrW(inputStream.Read())
            While character <> ControlChars.CrLf


                stringtotal = stringtotal + character
                character = ChrW(inputStream.Read())
            End While

            tempcount6 = CurrentStockLevel.Items.Count

            If tempcount6 = 0 Then

                CurrentStockLevel.Items.Insert(tempcount6, stringtotal)

            ElseIf tempcount6 <> 0 Then

                CurrentStockLevel.Items.Insert(tempcount6 + 1, stringtotal)

            End If

        End If

        inputStream.Close()
notice while character <> ControlChars.crlf that was my attempt, but this isnt a character -its a strng and this is my dilema, same with vbNewLine etc - what other options do i have! Please help, Andy

Share this post


Link to post
Share on other sites
Is there a reason you're parsing it this way? You could just call ReadLine() and process each line until you reach the end of the file or a pre-set number of lines. For the comma separated values you could call string.Split() to get a list of those.

// reader is a System.IO.StreamReader
string line;

while (!reader.EndOfStream)
{
if (!string.IsNullOrEmpty(line = reader.ReadLine()))
{
string[] values = line.Split(',');

// array length check if necessary

// do something with values[0]
// do something with values[1] ...
}
}

Apologies about the C# source. I don't know VB.NET that well but all of this should be interchangeable.

Share this post


Link to post
Share on other sites
Brilliant! Got this as working code:

While inputStream.EndOfStream <> True

line = inputStream.ReadLine

values = line.Split(",")

StockCode.Items.Insert(StockCode.Items.Count, values(0))
ItemName.Items.Insert(ItemName.Items.Count, values(1))
SupplierName.Items.Insert(SupplierName.Items.Count, values(2))
UnitCost.Items.Insert(UnitCost.Items.Count, values(3))
NumberRequired.Items.Insert(NumberRequired.Items.Count, values(4))
CurrentStockLevel.Items.Insert(CurrentStockLevel.Items.Count, values(5))

End While

Share this post


Link to post
Share on other sites

While Not inputStream.EndOfStream
line = inputStream.ReadLine

values = line.Split(",")

StockCode.Items.Insert(StockCode.Items.Count, values(0))
ItemName.Items.Insert(ItemName.Items.Count, values(1))
SupplierName.Items.Insert(SupplierName.Items.Count, values(2))
UnitCost.Items.Insert(UnitCost.Items.Count, values(3))
NumberRequired.Items.Insert(NumberRequired.Items.Count, values(4))
CurrentStockLevel.Items.Insert(CurrentStockLevel.Items.Count, values(5))
End While


That would be very slightly neater (and it's more easily understood, IMHO, than <> for not-equal). It's a very minor change, though.

Share this post


Link to post
Share on other sites
A minor, terser, variation:

For Each Line As String In File.ReadAllLines("file.csv")

Values = Line.Split(",")

' ...

Next


Some of the static methods in File are rather handy. [smile]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this