Importing Single Value from File

Hi there,

I've been carrying out some DFT calculations on a molecule and I have data files for which I'd like to automate the data extraction process. I'm attaching 2 sample files. I've used IGOR to extract multiple columns and rows of data, but my approach does not seem to be working for this particular set of files.

The value I'm interested is the "Total Energy" found in row 565 in the c1_gnd.txt file or row 564 in the c2_gnd.txt files I've attached.

What I'd like to do, is be able to extract that value from the text file and append that value to a wave in Igor. Since I have multiple files containing this information, the next step would be to cycle through the various files and extract the value from each and sequentially append them to the same wave. The complication with this particular set of files is that the position of the row containing the "Total Energy" value, changes by a row or two sometimes because of the number of iterations required to complete the previous calculations.

Any ideas?

Thanks!
c1_gnd.txt (1.76 MB) c2_gnd.txt (1.76 MB)
I think you would be better off reading all the relevant entries from one file at one time. That will save you the trouble of opening and closing and setting your position in the file multiple times. Once you are done loading all the data from files you can rearrange it as necessary in Igor.

A.G.
WaveMetrics, Inc.
So I looked around and I found something that gets me closer to what I need. The only problem with this is that even though I can successfully print the value I need, I can't add that value directly to a wave yet.

Is there an easy way to accomplish this?

Here's the code:

#pragma rtGlobals=3		// Use modern global access method and strict wave access.

Function ReadThisLine(pathName, filePath, whichLine, data)
	String pathName	// Name of Igor symbolic path
	String filePath			// File name, partial path or full path
	Variable whichLine		// 0-based line number
	String& data			// Output
 
	data = " "
 
	Variable refNum
 
	Open /R /P=$pathName refNum as filePath
 
	Variable lineNumber = 0
	do
		String tmpData
		FReadLine refNum, tmpData
		if (strlen(tmpData) == 0)
			return -1			// Error - end of file
		endif
		if (lineNumber == whichLine)
			data = tmpData
			close refNum
			return 0			// Success
		endif
		lineNumber += 1
	while(1)
End
 
Function DemoReadThisLine()
	String data
	Variable err = ReadThisLine("DFTTotalEnergy" ,"c1_gnd.out", 564, data)
	Print err, data
End


Here's a link to the original thread where found it:
http://www.igorexchange.com/node/1903

Thanks!
Do I get it right that you want some sort of 'Minimal Energy vs Configuration' plot?
Input all the .txt files (yes you can select lots of them, see '/MULT' in
open
)) line by line , parse the lines for the 'Total Energy' keyword) and append (
insertpoints
) the result to the 'total energy wave'. Most likely do the same for the 'configuration', i.e. the filename, (text-)wave. The
 stringmatch
command might become handy and think of '*' as a wildcard -- or maybe
stringbykey
.
If you need several values, I would also recommend A.G.'s procedure to import all parameters one a file is open.

Have a look at the manual or the help file ;-) or ask here for further advice.
HJ