|
|
|||||||
Hi, Newbie here, so please be kind I have a small problem which I am trying to work out, (and think logally the best way to attack the structure.) Once a week, I generate a file that reads a file and outputs a new file using this code (with lots of help from a previous helper . ) Code: $InputFile=("C:\Output2.txt") ;Modify location for path $OutputFile=("C:\List.txt") ;Modify location for path $Pick=5 ;Select the number of lines you want Break ON $fso = CreateObject("Scripting.FileSystemObject") $txt = $fso.OpenTextFile("$InputFile",Not 0) $Array=Split($txt.ReadAll,@CRLF) $txt.Close $=SRND(@MSECS) $=RND(0) For $Output=1 To $Pick $Array=Split(udfSqueeze(Join($Array,@CRLF),@CRLF),@CRLF) $iChose=IIf(UBound($Array)>0,RND(UBound($Array)),0) ; "Selection "+$Output+": "+$Array[$iChose]+@CRLF ;Debug to show on screen what is selected $ = Open(1,"$OutputFile",5) ;Generating output file list $ = WriteLine(1,$Array[$iChose]+@CRLF) $Array[$iChose]="" Next $ = Close(1) Function udfSqueeze($s,$q) $udfSqueeze=$q+$s+$q While InSTR($udfSqueeze,$q+$q) $udfSqueeze=Join(Split($udfSqueeze,$q+$q),$q) Loop $udfSqueeze=Split($q+$udfSqueeze+$q,$q+$q)[1] EndFunction Now, when I run a second job a week later, it generates a new output file. this output file MAY have the same entry in it as the previous week, so I want it to skip that entry and continue picking another entry to write into the file. So, if the first week file generates Word1 Word2 Word3 Word4 and the second weeks file has Word3 in it, I need the new output file to skip Word3 and continue picking a new word instead. Does that make sense? I am thinking about reading in the first file into an array, then reading the second file, select a random line in that file, check it, if not in the array, write the output, otherwise, discard that line, then pick another one, check it etc until I have my five lines in it. Does that make sense? And does my method of using an array make sense? Or is there a better way to do it. All help appreciated |
||||||||
|
|
|||||||
Tidied up the code a little. This may not be the best solution as you didn't actually say what the script is being used for, but it is a literal solution for your outline requirement. Code: Break ON $=SetOption("Explicit","ON") $=SetOption("WrapAtEOL","ON") $=SetOption("ANSI","ON") Dim $sDebug $sDebug=1 ; Set to 1 to display debug messages, 0 to suppress Dim $sFolderPath,$sInputPath,$sOutputPath, $sLastPath Dim $iPick,$fso,$oInputFile,$oLastFile Dim $asInputList, $sLastList, $iChose $sFolderPath="D:\TEMP\" ; Folder containg data files $sInputPath=$sFolderPath+"InputList.txt" ; File containing list to select from $sLastPath=$sFolderPath+"InputList.old" ; Last week's file (copy of above $sOutputPath=$sFolderPath+"OutputList.txt" ; Selected items $iPick=5 ; Number of items to select $=SRND(@MSECS) $=RND(0) ; Copy last week's selections to backup file Copy $sOutputPath $sLastPath ; Load up the original list $fso = CreateObject("Scripting.FileSystemObject") $oInputFile = $fso.OpenTextFile($sInputPath,Not 0) $asInputList=Split($oInputFile.ReadAll,@CRLF) $oInputFile.Close ; Load up last weeks selections $oLastFile = $fso.OpenTextFile($sLastPath,Not 0) $sLastList=@CRLF+$oLastFile.ReadAll+@CRLF $oLastFile.Close $=Open(1,$sOutputPath,5) ;Generating output file list While $iPick $asInputList=Split(udfSqueeze(Join($asInputList,@CRLF),@CRLF),@CRLF) $iChose=IIf(UBound($asInputList)>0,RND(UBound($asInputList)),0) If $sDEBUG "Selection "+$iPick+": "+$asInputList[$iChose]+@CRLF EndIf ; *DEBUG* If $asInputList[$iChose]="" If $sDEBUG " Input list exhausted - aborting."+@CRLF EndIf ; *DEBUG* Exit 259 EndIf ; If the item was previously selected then abandon it If InStr($sLastList,@CRLF+$asInputList[$iChose]+@CRLF) If $sDebug " Selection dropped as used last week"+@CRLF EndIf ; *DEBUG* Else $=WriteLine(1,$asInputList[$iChose]+@CRLF) $iPick=$iPick-1 EndIf $asInputList[$iChose]="" Loop $=Close(1) Function udfSqueeze($s,$q) $udfSqueeze=$q+$s+$q While InSTR($udfSqueeze,$q+$q) $udfSqueeze=Join(Split($udfSqueeze,$q+$q),$q) Loop $udfSqueeze=Split($q+$udfSqueeze+$q,$q+$q)[1] EndFunction |
||||||||
|
|
|||||||
Wow, quick and brilliant response. I will give it a test and let you know how it goes. Once again, thanks!! |
||||||||
|
|
|||||||
Richard H - you the man. Thanks for the code, I just changed the file names around and it now does EXACTLY what I wanted. 100/100 for you mate. |
||||||||
|
|
|||||||
You are welcome, thank-you for the feedback. There is a possible bug in the script - it depends on how you are using it. Because the script copies last week's file the new selections get appended to the existing list. If you change the file COPY command to a MOVE command that should fix it. |
||||||||
|
|
|||||||
Thanks for letting me know. I had to make a small change to that line anyway, and substituted the COPY with a MOVE already. I worked that one out when working through the code so I can get a better understanding of what it does. I also liked the way you enable Debugging by simply turning it on in one place. Never thought of that... but hey, like I said, I am a newbie I really seriously need to find a "scripting for Dummies" book so I can get a better understanding of scripting, as I am still in kindergarten when it comes to this stuff... nothing more frustrating that knowing what you want done but not being able to do it .... Thanks again. |
||||||||
|
|
|||||||
Quote: I really seriously need to find a "scripting for Dummies" Not that we the mods, or everyone else around here are dummies... but if you hang around and participate... you would be surprised how much you learn. |
||||||||
|
|
|||||||
Sorry, didn't mean to offend...just calling myself a dummy cause I don't have a good understanding of this stuff, and only wish I could do half the things many of these talented people could do. I was really just implying (my mistake) that I need to dig around for a while to find some good, basic learning materials that doesn't assume any previous knowledge about scripting or programming. And yes, you are right, I have started to learn that with this stuff, you are only limited by your imagination |
||||||||
|
|
|||||||
no worries there... I'm sure we've all been called worse Seriously, I just meant this site is far better than a book. |