• 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 Shell Extension 4.2.0 by Razvan Serea XnView Shell Extension is a powerful Windows Explorer add-on that enhances file management by providing quick image previews, thumbnails, and context menu tools without launching XnView. It supports over 500 image formats including RAW (CR2/NEF), WebP, HEIC, TIFF, and vector formats (PSD/SVG), allowing users to resize, convert, edit, and optimize images directly from the right-click menu. The lightweight integration streamlines workflows, enabling batch processing, metadata viewing (EXIF/IPTC), and seamless format conversion—ideal for photographers, designers, and casual users who need efficient file handling. Beyond basic previews, the extension offers advanced features like image rotation, format adjustments, and plugin support. Its intuitive interface ensures fast access to editing tools while maintaining system performance. XnView Shell Extension key features: 500+ Format Support – Opens and converts RAW, WebP, HEIC, TIFF, PSD, SVG, and more Batch Processing – Convert, resize, or rename multiple images at once Lossless JPEG Editing – Rotate, flip, and adjust without quality loss Metadata Preservation – Retains EXIF, IPTC, and XMP data during conversions Advanced Compression – Customize JPEG quality, PNG optimization, and WEBP settings Color Management – Handles ICC profiles, bit-depth (8/16/32-bit), and CMYK-to-RGB conversion PDF & GIF Support – Extract images from PDFs or create animated GIFs High-Speed Previews – Fast thumbnails and image previews in Windows Explorer Right-Click Actions – Quick access to resize, rotate, and convert without opening apps Plugin Extensibility – Add support for niche formats like DDS, HDR, or DICOM Download: XnShell 64-bit | Portable 64-bit | ~10.0 MB (Freeware) Download: XnShell 32-bit | Portable 32-bit | ~3.0 MB Links: XnView Shell Extension Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Another win for EU users? Ads in WhatsApp won't be coming this year by David Uzondu You might have heard that ads are making their way to WhatsApp after years of the company promising it would never happen. If you are in the EU (lucky you), you won't be seeing ads until 2026 at the earliest. A new report from POLITICO confirms that Meta, which owns the messaging service, has informed Ireland's privacy regulator that the new advertising model will not roll out in the European Union for quite some time, even as it appears elsewhere in the coming months. This is not some charitable act, of course. The delay gives European regulators time to scrutinize the plan, which involves using ad preferences from linked Facebook and Instagram accounts to target users. This situation follows a pattern of other "wins" for EU users, like the changes in iOS 17.4 that finally enabled sideloading. This opened the door for alternative app stores and the (temporary) return of games like Fortnite to iPhones in the region. Similarly, we are seeing Microsoft finally back off from shoving Edge down the throats of EU users, all thanks to the Digital Markets Act. This legislation has put pressure on big tech companies to operate more "fairly" within the bloc, leading to changes that users everywhere else can only dream of for now. These regulations are precisely what companies like Apple hate. Remember, Apple has issued a warning to Australia, telling the country not to follow Europe's lead on these matters because it would create massive security and privacy risks. Apple argues that its control over the ecosystem keeps users safe, so any attempt to break that open is dangerous. The Irish Data Protection Commission will be meeting with WhatsApp to discuss the matter further. According to Commissioner Des Hogan, they plan to discuss the ad model with other European data protection authorities to gather any collective concerns. Commissioner Dale Sunderland noted that discussions with the company are "still early days", and it is too soon to identify what, if any, specific "red line issues" might exist with Meta's advertising plans. For now, Europeans can continue using their ad-free messenger, while the rest of the world prepares for the inevitable.
    • Welcome to Neowin!
    • Idiots never imagine their insane actions troubling everyone.  
    • Photo Variants 2.3 by Razvan Serea Photo Variants is an all-in-one photo editor for Windows. Quickly cull, import, and edit your images with powerful tools. Enjoy full layer support, precise retouching features, and a wide range of filters and color adjustments. Create multiple versions of a photo instantly with presets, or design from scratch using vector graphics and advanced editing options. Free for personal and commercial use. Photo Variants key Features: Advanced Adjustment Tools: Provides precise control over image modifications. ​ Extensive Filter Collection: Offers over 99 photo filters to apply various effects. ​ Animated Photo Effects: Enables the addition of dynamic elements to images. ​ Automatic Face Retouching: Includes features for enhancing facial features automatically. ​ Support for Multiple Formats: Compatible with over 100 graphic formats, including RAW and PSD files, allowing users to open, edit, and save in these formats. ​ Drawing and Transformation Tools: Facilitates freehand drawing, erasing, filling, cropping, resizing, rotating, and flipping images. Photo Variants supports a wide array of image formats, making it a versatile tool for all your editing needs. Key supported formats include: Raster Formats: .jpeg, .jpg, .png, .bmp, .gif, .tiff, .webp, .ico, .pcx. Camera RAW: .crw, .cr2, .dng, .nef, .raf, .arw, .orf, .x3f, .raw. Professional Formats: .psd, .ai, .svg, .tga, .pdf, .pcl. Specialized Formats: .dicom, .dcm, .heic, .heif, .avif, .exr, .dds. Other: .wmf, .emf, .xps, .jpeg2000 (.jp2)...etc... With support for these formats, Photo Variants offers seamless editing and flexibility for photographers, designers, and creatives. Photo Variants 2.3 changes: New effects for layers. New shapes and options for brushes. Download: Photo Variants 2.3 | 70.5 MB (Freeware) View: Photo Variants Home page | 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
      689
    2. 2
      ATLien_0
      268
    3. 3
      Michael Scrip
      204
    4. 4
      +FloatingFatMan
      170
    5. 5
      Steven P.
      144
  • Tell a friend

    Love Neowin? Tell a friend!