• 0

[vb.net] count number of lines in a textfile


Question

  Visual Basic .NET said:
Dim line(1000), txt As String

Dim x As Integer = 0

Dim file As System.IO.StreamReader

file = New System.IO.StreamReader(OpenFileDialog1.FileName)

Do

? ? txt = file.ReadLine()

? ? line(x) = txt

? ? x += 1

Loop Until txt Is Nothing

currently i'm using this to read a text file and put each line of text in an array of strings (i need to parse the strings later). this works great, but i have to declare line() with an index, or redim it later with an index of the number of lines the file contains. this code works for files up to 1001 lines long (arrays start at 0) but files larger than that cause an error. my problem lies in that i can't find the number of lines without doing something like this first:

  Visual Basic .NET said:
Do

? ? txt = file.ReadLine()

? ? x += 1

Loop Until txt Is Nothing

ReDim line(x)

x = 0 'set x to zero for start of next loop

this would work, but i would be reading the file twice, which takes time. sure, most text files aren't so big that you would notice a pause, but i want to do:pt right :p how would i get the number of lines in a text file? searching on MSDN doesn't bring up much about this with the streamreader class, so i don't know what to do...

7 answers to this question

Recommended Posts

  • 0

You don't need to load the whole file all at once into memory.

Just check for number of VbCr (ascii 13) charaters in the text file.

This will give you the number of lines in the file.

If the last character of the file is not VbCr or VbLf (ascii 10) then add 1 to the total count.

  • 0
  gameguy said:
noll: i'll look into arraylists, i haven't heard of those...

Yes, check out all the Collections classes. I can't remember the last time I used a normal array for much of anything. I was fortunate enough to have a professor for Java who taught us these and made us rewrite many parts of the Java Collections Framework (which mostly works the same in .NET) so I've used them extensively knowing how they work.

  • 0

i need it line by line, otherwise i'd do that.

using this code, i get an error saying "index was out of range. must be non-negative number and less than the size of the collection."

  Quote
Dim line As New ArrayList()

Dim txt As String

Dim x As Integer = 0

Dim file As System.IO.StreamReader

file = New System.IO.StreamReader(OpenFileDialog1.FileName)

Do

? ? txt = file.ReadLine()

? ? line(x) = txt 'code crashes on this line

? ? x += 1

Loop Until txt Is Nothing

:blink:blink: the index IS a non-negative number less than the size of the collection (default capacity for an ArrayList is 16, right?) x is zero, which satisfies both conditions, so what's the pro:huh: :huh: it's happening the first time it loops, when x is zero. and it should grow when it needs to anyway, r:unsure:nsure:

  • 0

nevermind, i fixed it. i had to use line.Insert(x, txt) instead of treating it as an array.

fixed code:

  Quote
Do

? ? txt = file.ReadLine()

? ? line.Insert(x, txt) 'Insert(index As Integer, value As Object)

? ? x += 1

Loop Until txt Is Nothing

Edited by gameguy
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • ...if there is any question if it's fake ... Steve Gibson created a little program to detect fraudulent drives.   https://www.grc.com/validrive.htm
    • Hello   Would anyone know by chance regarding the Lian Li Lancool 216 ARGB/Fan hub specifically where the front fans would connect to, to be able to see there RPM in UEFI bios when setting up the fan curves,   i am not a hardware expert, mostly a noob on Hardware still,  trying to learn as much as i can, but its a slow process. Did get Dust clean out done on system, and Temps are much much better,  even during a Defender scan previously i'd hit 85C or higher at times, today despite RL temp being humid and warmer today a bit,  didn't hardly go over 60C.     So i definitely cleaned system good this time!! Did the clean out after early afternoon storms ended!! **Note did not build system myself, had Ibuypower Build my Dream Ryzen Build, normally i don't mention that part as sometimes i feel ashamed that i can't build a whole system myself**  Even my last system before this one had Local PC shop build that one, it ran ok, but even after getting the upgraded cooler installed they said this should work,    still throttled when doing tasks.     My AMD Never Throttles!! I also tend to worry alot, just my nature i guess  
    • Did you just buy this drive? Were you ever able to use the full capacity, or you bought this new/only shows 3 GB? If this is new, then you probably got a fake.
    • Steam overlay's FPS counter gets major upgrade to show CPU and VRAM usage, temps, and more by Pulasthi Ariyasinghe Valve has been steadily revamping its Steam client for years now, with major updates hitting the PC store and platform targeting various parts. The next target has been revealed to be the very popular performance monitor that's a part of the Steam overlay. While the current version only shows a number in a small area to count the current frame rate of the game that's running, the update is giving much more information to the user. Now available via the Steam Beta client, the performance monitor now has multiple detail levels to choose from. These are FPS Single Value (the original version), FPS Detail & Graph, FPS Detail CPU & GPU Utilization, as well as the behemoth FPS Detail & Graph, CPU, GPU, & RAM Details options. As expected, each option adds more and more information to what's shown to the user on the overlay. Screen position, contrast and saturation, as well as background opacity, can also be adjusted from the same overlay settings page. The image above shows the maximum detail option available for users, with everything from generated frames to helpful graphs and VRAM information being shown while playing a game. "The performance monitor can help you understand your frame rate (both including frame generation, and base game frame rate), and it can help you see if CPU utilization might be your bottleneck, or if your GPU is," says Valve regarding its latest upgrade. "You can see if you are out of system or video memory and if those factors are impacting performance as well." Valve said that some of these features, in this initial beta release, will only be available on Windows machines, at least for now. "Much of it will apply to other supported operating systems and while some metrics are not supported on other operating systems additional support is planned for later," added the company. Check out this handy FAQ set up by Valve that explains what each setting means as well as notes on what issues players can diagnose, like micro stutter or bottlenecks, using these overlay additions. To try out the new feature before it goes out to everyone, you can switch to the Steam Beta Client by heading to the app's Settings > Interface section and changing the Client Beta Participation dropdown to the latest version available. Following that, to enable the new performance monitor, go to Settings > In Game section, and change the detail level to the level you would like.
    • I actually didn't like the classic Start Menu as much as the XP, Vista, 7 style menu. Mainly didn't like how you either had to click Programs every time, when that is what you would want 95% of the time, or fill up that top section (I forget what it was called back then) which was both harder than it should have been and looked ugly.
  • Recent Achievements

    • First Post
      TIGOSS earned a badge
      First Post
    • Week One Done
      slackerzz earned a badge
      Week One Done
    • Week One Done
      vivetool earned a badge
      Week One Done
    • Reacting Well
      pnajbar earned a badge
      Reacting Well
    • Week One Done
      TBithoney earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      675
    2. 2
      ATLien_0
      284
    3. 3
      Michael Scrip
      219
    4. 4
      +FloatingFatMan
      196
    5. 5
      Steven P.
      133
  • Tell a friend

    Love Neowin? Tell a friend!