|
I have a few questions about something I'm trying to do and don't know
how. Answers to any of the questions would be appreciated. If you feel that I should ask each question in a separate E-mail, please tell me. The reason I put them all together was to try to keep this from clogging inboxes. INTRO: I have written code, using syntax and some Python, that imports data from a text file (using GET DATA), manipulates it in various ways, and then writes it to a different text file (using WRITE). When completed, this will be a batch operation performed on thousands of files. QUESTIONS: 1) While thousands of files should be read in, the output should be a single file. Whenever I run the code, the WRITE command overwrites the file. Is there any way to make it append instead? 2) I need these files to be read in an organized fashion, according to how they are named. I've tried an experiment by writing the code this way: LOOP #HEMI=rh lh. GET DATA /TYPE = TXT /FILE = 'C:\Documents and Settings\Cog Neuro Psych Lab\Desktop\sub009_dw_i'+ 'n_angular_gyrus_#HEMI.amp' [...various operations...] WRITE OUTFILE="C:\Documents and Settings\Cog Neuro Psych Lab\Desktop\test_#HEMI.txt" /ALL. EXECUTE. END LOOP. This does not work, and so far as I understand, it's because syntax won't substitute string variables within quotes. Does anybody know a way to do this that would actually work? ---- If anyone can shed any light on either of these, I will be deeply grateful. -Greg ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
|
Hi Greg,
The code below should do the trick. It adds/appends all files in a given dir and saves them as one combined file called 'merged.sav'. I borrowed some code from Jon Peck and modifid it so every time the ADD FILES maximum is reached, add files is executed. Perhaps this could be done in a simpler way, but at least it works! Cheers!! Albert-Jan *sample code to generate a bunch of files. BEGIN PROGRAM. import spss for myfile in range (1, 110): myfile2 = str(myfile).zfill(3) spss.Submit(""" input program. loop #sample=1 to 10. compute x = rv.normal(0,1). end case. end loop. end file. end input program. compute source = %s. """ % (myfile)) if myfile % 10 == 0 and myfile != 0: spss.Submit("save outfile = 'd:/temp/out%s.sav'." % (myfile2)) else: spss.Submit("xsave outfile = 'd:/temp/out%s.sav'." % (myfile2)) spss.Submit("exe.") END PROGRAM. *actual code. set mprint = on. BEGIN PROGRAM. import spss import glob savlist = glob.glob("d:/temp/out*.sav") savlist.sort() if savlist: mylen = len(savlist) for i in range (0, mylen, 50): j = i + 49 if i == 0: cmd = ["ADD FILES "] + ["/FILE='" + fn + "'" for fn in savlist[i:j+1]] + [".", "EXECUTE."] spss.Submit(cmd) spss.Submit("save outfile = 'd:/temp/merged.sav'.") else: cmd = ["ADD FILES /FILE = 'd:/temp/merged.sav' "] + ["/FILE='" + fn + "'" for fn in savlist[i:j]] + [".", "EXECUTE."] spss.Submit(cmd) spss.Submit("save outfile = 'd:/temp/merged.sav'.") else: print "No files found to merge" END PROGRAM. --- On Thu, 8/14/08, Greg Chulsky <[hidden email]> wrote: > From: Greg Chulsky <[hidden email]> > Subject: Appending with WRITE; String variables in quotes > To: [hidden email] > Date: Thursday, August 14, 2008, 9:27 PM > I have a few questions about something I'm trying to do > and don't know > how. Answers to any of the questions would be appreciated. > If you feel > that I should ask each question in a separate E-mail, > please tell me. > The reason I put them all together was to try to keep this > from clogging > inboxes. > > INTRO: I have written code, using syntax and some Python, > that imports > data from a text file (using GET DATA), manipulates it in > various ways, > and then writes it to a different text file (using WRITE). > When > completed, this will be a batch operation performed on > thousands of files. > > QUESTIONS: > > 1) While thousands of files should be read in, the output > should be a > single file. Whenever I run the code, the WRITE command > overwrites the > file. Is there any way to make it append instead? > > 2) I need these files to be read in an organized fashion, > according to > how they are named. I've tried an experiment by > writing the code this way: > > LOOP #HEMI=rh lh. > > GET DATA /TYPE = TXT > /FILE = 'C:\Documents and Settings\Cog Neuro > Psych > Lab\Desktop\sub009_dw_i'+ > 'n_angular_gyrus_#HEMI.amp' > > [...various operations...] > > WRITE OUTFILE="C:\Documents and Settings\Cog > Neuro Psych > Lab\Desktop\test_#HEMI.txt" > /ALL. > EXECUTE. > > END LOOP. > > This does not work, and so far as I understand, it's > because syntax > won't substitute string variables within quotes. Does > anybody know a > way to do this that would actually work? > > ---- > > If anyone can shed any light on either of these, I will be > deeply grateful. > > -Greg > > ===================== > To manage your subscription to SPSSX-L, send a message to > [hidden email] (not to SPSSX-L), with no body > text except the > command. To leave the list, send the command > SIGNOFF SPSSX-L > For a list of commands to manage subscriptions, send the > command > INFO REFCARD ===================== To manage your subscription to SPSSX-L, send a message to [hidden email] (not to SPSSX-L), with no body text except the command. To leave the list, send the command SIGNOFF SPSSX-L For a list of commands to manage subscriptions, send the command INFO REFCARD |
| Free forum by Nabble | Edit this page |
