Scratching my head over this one... (String Extraction)

Started by oradba4u, March 23, 2015, 11:52:50 AM

Previous topic - Next topic

oradba4u

All:
I am reading a text file. Each line contains 7-18 groups of ââ,¬Ëœnumbersââ,¬â,,¢ (including zero) such as:

0     0     0     0     0     2     0     0     0     22
2     2     0     0     0     12     1     0     2     3     10
2     2     0     0     0     12     15
0     2     0     2     0     0     0     11     2     0     1     1     1     4

Regardless of the line length, there are always 5 blank spaces between each of the numbers. The first number always starts at character position 23 of the line.
Any help would be greatly appreciated, as I have spent a lot of time/effort failing this task.
1-) How can I extract each (numeric string) from the line?
2-) Convert this string to a number.
As always, your help is appreciated.

Banging my head in Bangor

td

Your description of the problem is missing a few important details but here is an example of a partial solution.  There are much more efficient ways to solve the problem but the example is hopefully simple to understand and should be view as a potential launching point for better solution.

Code (winbatch) Select

; Create test data.
strFile = DirScript():'TestDummy.txt'
if !FileExist(strFile)
   strRecs = '0     0     0     0     0     2     0     0     0     22':@LF
   strRecs :='2     2     0     0     0     12     1     0     2     3     10':@LF
   strRecs :='2     2     0     0     0     12     15':@LF
   strRecs :='0     2     0     2     0     0     0     11     2     0     1     1     1     4'
   FilePut(strFile, strRecs)
endif

; Sum of all integers repressented in the file.
nSum = 0
hTest = FileOpen(strFile, "Read")
while 1
   strLine = FileRead(hTest)
   If  strLine == "*EOF*" Then Break
   nItems = ItemCount(strLine, " ")
   for i = 1 to nItems
      Item = ItemExtract(i, strLine, " ")
      if strLen(Item) then nSum += Item
   next
endwhile
FileClose(hTest)

Message("Sum of all Integers", "Sum = ":nSum)
"No one who sees a peregrine falcon fly can ever forget the beauty and thrill of that flight."
  - Dr. Tom Cade

oradba4u

Yeah, after looking at what I sent, I can see that I certainly didn't give you enough information

There may be several thousand lines of data -   line=fileread(handle)
I mentioned that the first number in the data line always starts at character position 23, so I want to "skip" anything before that.
There can only be a total of 16 numbers on each data line (after column 23). There is always 5 spaces between the numbers (if that helps).
Also, I want to sum numbers vertically, not horizontally... By that I mean in the example I gave 4 lines of data from the file:
0     0     0     0     0     2     0     0     0     22
2     2     0     0     0     12     1     0     2     3     10
2     2     0     0     0     12     15
0     2     0     2     0     0     0     11     2     0     1     1     1     4

I'm trying to sum vertically into an array: value[1], value[2]... value[16]

So from the sample data I sent:
value[1]=0+2+2+0
value[2]=0+2+2+2
value[3]=0+0+0+2
value[6]=2+12+12+0  and so on.

Hope this helps...

td

It is relatively easy to modify the previously posted script to sum columns instead of rows.  Just create an array the size of the max number of columns and use a variable to track the current column.  You can use the StrSub function to remove the first 23 characters.
"No one who sees a peregrine falcon fly can ever forget the beauty and thrill of that flight."
  - Dr. Tom Cade