• 0

[C++] How to jump a specific line when reading a file?


Question

11 answers to this question

Recommended Posts

  • 0

There's no way to go to a specific line without reading up to that point, since each line in the file you are reading probably has a different length. You could try read the entire file while looking for newlines and for each newline you find, add the position to an array. Then you can seek to that position by using the line number as the array's index and the value as the position in the file.

  • 0
  Banjo said:
There's no way to go to a specific line without reading up to that point, since each line in the file you are reading probably has a different length. You could try read the entire file while looking for newlines and for each newline you find, add the position to an array. Then you can seek to that position by using the line number as the array's index and the value as the position in the file.

That sounds incredibly taxing, though :/ Especially if it's a really big file that you need to go through multiple times. Or am I reading it wrong?

  • 0

You would only need to go through it once to store the line indexes in the array. After that, everything is fast since you just look up two values in the array - the start of the line you want and the start of the next line (so you know how much to read)

If you are in control of what the file contains, an even easier method is to just pad each line to the same length and use multiplication to find out where the line starts

  • 0
  The Tjalian said:
That sounds incredibly taxing, though :/ Especially if it's a really big file that you need to go through multiple times. Or am I reading it wrong?

Well how else would you do it? Unless the file has lines of a fixed length, or has its own index, somebody needs to scan through it to find the line breaks. Whether it's a library / API or your own code, it needs to be done.

If you just need to scan to a certain line number once and make a single pass through the file, you don't need to save off the indices into an array as suggested. That's an optimization that you can do if you're going to need to seek to different lines within the file several times (and possibly out-of-order). Likely you'll want to make this part of your "loading" process for the file as users are accustomed to this behavior.

  • 0

by using the seekg method I posted earlier, the user can set the seekg to the 0th position from ios::end, access tellg to get the length of the file, then set seekg to the position he wanted knowing his upper and lower limits... very simple an efficient.

  • 0

how about using getline() ?

Here you can find this code:

ifstream fin("data.txt");
  string s;
  while( getline(fin,s) ) {
	cout << "Read from file: " << s << endl;
  }

which is reading string line by line. Just store the s.size(); (string's length) to a variable, and sum it up for each loop. You may set the loop limit as the argument pass, and return the sum for seekg();.

If I got a chance, I'll put the code.

Or maybe just use tellg(); after each loop for loop limit (line number). return the last tellg(); value for seekg();

This may not work. I just type it out here:

long goto_file_line(int iLine_Number) {
	ifstream fin("data.txt");
	string s;
	long length;

	fin.seekg (0, ios::beg); // go to the first line

	for (int i=0; i<=iLine_Number; i++) // loop 'till the desired line
		getline(fin, s);

	length = fin.tellg(); // tell the first position at the line, maybe +1 or -1. try if it's not working
	return length;
}

or add seekg(); for void, so you can continue your i/o after the function.

void goto_file_line(int iLine_Number) {
	ifstream fin("data.txt");
	string s;
	long length;

	fin.seekg (0, ios::beg); // go to the first line

	for (int i=0; i<=iLine_Number; i++) // loop 'till the desired line
		getline(fin, s);

	length = fin.tellg(); // tell the first position at the line, maybe +1 or -1. try if it's not working
	fin.seekg(length);
}

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

    • No registered users viewing this page.
  • Posts

    • XnView 2.52.2 by Razvan Serea XnView is freeware software that allows you to view and convert graphic files. It's very fast and easy to use. But more importantly it supports more than 500 graphics formats! Import about 500 graphic file formats Export about 50 graphic file formats Multipage TIFF, Animated GIF, Animated ICO support Image IPTC, EXIF metadata support EXIF auto rotation support IPTC editing Resize, rotate, crop support Lossless rotate & crop (jpeg) support Adjust brightness, contrast... Auto levels, contrast Modify number of colors Apply filters (blur, average, emboss, ...) Apply effects (lens, wave, ...) Fullscreen mode Slide show with effects Batch convert, batch rename Create WEB page easily Screen capture Create contact Sheet Create or edit Multi-page file (TIFF, DCX, LDF) TWAIN & WIA support (Windows only) Print support (Windows only) Drag & Drop support (Windows only) Compare image side by side Filmstrip layout 44 languages support (Windows only) XnView 2.52.2 changelog: NConvert: -xyb for JPEGli XnView vs XnView MP: XnView is the classic, lightweight version with basic features and Windows-only support. XnView MP is the modern, cross-platform version with an improved interface, better performance, and extended format support. Download: XnView 2.52.2 Installer | Standalone | ~24.0 MB (Non-commercial freeware) Download: XnView MP 1.9.2 64-bit | Standalone | ~100.0 MB Download: XnView MP 1.9.2 32-bit | Standalone | ~60.0 MB View: XnView Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Correct. You don’t buy anything that’s free (if it were).
    • Vivaldi 7.4.3684.52 by Razvan Serea Vivaldi is a cross-platform web browser built for – and with – the web. A browser based on the Blink engine (same in Chrome and Chromium) that is fast, but also a browser that is rich in functionality, highly flexible and puts the user first. A browser that is made for you. Vivaldi is produced with love by a founding team of browser pioneers, including former CEO Jon Stephenson von Tetzchner, who co-founded and led Opera Software. Vivaldi’s interface is very customizable. Vivaldi combines simplicity and fashion to create a basic, highly customizable interface that provides everything a internet user could need. The browser allows users to customize the appearance of UI elements such as background color, overall theme, address bar and tab positioning, and start pages. Vivaldi features the ability to "stack" and "tile" tabs, annotate web pages, add notes to bookmarks and much more. Vivaldi 7.4.3684.52 changelog: [Address bar] URL is searched instead of opening (VB-117198) [Chromium] Update to 136.0.7103.179 [Settings][Workspaces] Add Workspace Rule button hidden by 4th rule (VB-117181) Download: Vivaldi 64-bit | 125.0 MB (Freeware) Download: Vivaldi 32-bit | ARM64 View: Vivaldi Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • NTLite 2025.06.10482 by Razvan Serea NTLite is a Windows configuration tool that allows you to modify your existing Windows install or an image yet to be deployed, remove Windows components, configure and integrate, speed up the Windows deployment process. Reduce Windows footprint on your RAM and storage drive memory. Remove components of your choice, guarded by compatibility safety mechanisms, which speed up finding that sweet spot. Windows Unattended feature support, providing many commonly used options on a single page for easy setup. Easily integrate a single or multiple drivers, update or language packages. Package integration features smart sorting, enabling you to seamlessly add packages for integration and the tool will apply them in the appropriate order, keeping hotfix compatibility in check. One of the important new features of NTLite (compared to its predecessors) is the ability to modify an already installed the operating system, by removing unnecessary components. Supports Windows 11, 10, 8.1 and 7, x86 and x64, live and image. Server editions of the same versions, excluding support for component removals and feature configuration. ARM64 image support in the alpha stage. Does not support Checked/Debug, Embedded, IoT editions, nor Vista or XP. NTLite 2025.06.10482 changelog: Fix Image: Image optimization would be skipped if both boot.wim and install.wim would keep only one edition Image: Crash after exporting unloaded image in certain situations Upgrade UI-Translation: Thanks for Turkish (Salih DURDU), Georgian (Anonymous) Download: NTLite 64-bit | 21.5 MB (Free, paid upgrade available) Download: NTLite 32-bit | 19.3 MB Link: NTLite Home Page | NTLite Features | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • Week One Done
      Wayne Robinson earned a badge
      Week One Done
    • One Month Later
      Karan Khanna earned a badge
      One Month Later
    • Week One Done
      Karan Khanna earned a badge
      Week One Done
    • First Post
      MikeK13 earned a badge
      First Post
    • Week One Done
      OHI Accounting earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      681
    2. 2
      ATLien_0
      265
    3. 3
      Michael Scrip
      202
    4. 4
      +FloatingFatMan
      166
    5. 5
      Steven P.
      141
  • Tell a friend

    Love Neowin? Tell a friend!