input-file openen buiten for-loop

Status
Niet open voor verdere reacties.

m.vanhout

Nieuwe gebruiker
Lid geworden
7 sep 2006
Berichten
4
Hallo,

Weet er iemand misschien een manier om bij het volgende programma het openen van de input-file data.txt uit de for-loop te halen? Dit veelvuldige openen kost nl. erg veel tijd. Ik wil wel in iedere loop-iteratie vanaf de start van data.txt beginnen in te lezen.

Alvast bedankt!

Marjolein


Code:
#include <fstream> 

const int n = 6;

void main ()
{
	int a [n];
	
	for (int k = 1; k <= 999999999; k++)
	{
		ifstream inFile ("c:/data.txt");		

		for (int j = 1; j <= n; j++)
			inFile >> a [j - 1];
		
		inFile.close ();

//		(...)
	}
}
 
Waarom moeilijk doen; Je doet gewoon wat je precies zegt, het openen van het bestand buiten de for-loop te zetten.

Code:
ifstream inFile("C:/data.txt");
	for (int k = 1; k <= 999999999; k++)
	{
		for (int j = 1; j <= n; j++)
			inFile >> a [j - 1];
		
		inFile.close ();

//		(...)
	}
 
Dan begint hij niet elke iteratie vooraan in de file met inlezen...
 
Om er voor te zorgen dat er vooraan wordt begonnen zul je eventuele flags met inFile.flush() moeten resetten (flags zoals end-of-file). Daarna kan je met inFile.seekg de nieuwe positie bepalen waar er gelezen moet worden. inFile.seekg(0) begint dus vooraan :).

Ik hoop dat je er uit komt.

Peter.
 
ik denk dat het dees is :

Code :: ::

ifstream inFile("C:\data.txt");
for (int k = 1; k <= 999999999; k++)
{
for (int j = 1; j <= n; j++)
inFile >> a [j - 1];

inFile.close ();

// (...)
}



ik weet niet dat het C:\ is of C:/ .
 
ik denk dat het dees is :

Code :: ::

ifstream inFile("C:\data.txt");
for (int k = 1; k <= 999999999; k++)
{
for (int j = 1; j <= n; j++)
inFile >> a [j - 1];

inFile.close ();

// (...)
}



ik weet niet dat het C:\ is of C:/ .


Lees de laatste post van TS, daarin staat dat hij/zij elke keer vooraan wilt beginnen met lezen. Lees mijn reactie voor het antwoord.

'C:/' is correct. Als je dit doet: 'C:\' dan moet je dat altijd nog in dit veranderen 'C:\\' om de '\' te escapen.
 
Ja, seekg(0) werkt wel, maar in mijn toepassing spaart het helaas nauwelijks tijd uit...
 
Ook zou ik het invoerbestand sluiten ná de for-loop :) (daar open je m immers ook, erbuiten)
 
Ook zou ik het invoerbestand sluiten ná de for-loop :) (daar open je m immers ook, erbuiten)

Hoeft niet per see. Je maakt gebruik van de fstream-klasse niet van de C functies fopen en fclose ;). De destructor wordt automatisch aangeroepen als de instantie buiten de scope valt.

@TS: Dan heb ik geen idee hoe je je toepassing sneller zou kunnen laten draaien. Misschien een andere taal gebruiken, ASM?
 
Ik zou er misschien achter kunnen komen met een profiler, maar ik heb daar verder geen ervaring mee. Heeft er iemand misschien tips over profilers die te gebruiken zijn bij Borland C++Builder Compiler 5.5 of Borland C++Builder 6? Alvast bedankt!
H.g., Marjolein
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan