I am trying to upgrade a working page to use an array of objects. The existing page is spacepart.htm and am working on spacepart1.htm.
This is a sample of what's new:I get an error message lineUarr[iU] is undefined but don't understand what the problem is. The value of "iU" is far less than the number of occurances when this happens. Test data are build into the demo function.Code:function noteTable(thisLine) { this.line = thisLine; if (thisLine == "") { this.dur = Number.POSITIVE_INFINITY this.begPos = Number.POSITIVE_INFINITY; this.endPos = Number.POSITIVE_INFINITY; } else { this.dur = 0; this.begPos = sumMeasure * 50000 + sumBatch; result=this.line.match(/Dur:([^\|]*)/); if ((result != null) && (this.line.indexOf("Grace") == -1)) { // Has duration but is not grace. var durVal = result[1]; var durLen = getNoteLength(durVal); this.dur = durLen; if (durLen == -1) { alert("Illegal length: " + this.line); return 1; } else { sumBatch += durLen; } // Keeping a running total of note durations in 768th notes } // End of object with "Dur:" not a grace note else { if (this.line.slice(0,4) == "|Bar") { sumBatch=0; sumMeasure++; } } this.endPos = 50000 * sumMeasure + sumBatch; } } function doMove() { var result=new Array(), lineL = new Array(), lineU = new Array(), lineUarr=new Array(), lineLarr=new Array(); tempField=document.penta.UPstaff.value; tempField=tempField.replace(/\r/g,""); var lineU=tempField.split("\n"); // Upper staff tempField=document.penta.DNstaff.value; tempField=tempField.replace(/\r/g,""); var lineL=tempField.split("\n"); // Lower staff sumMeasure = 0, sumBatch = 0; for (var iU=0; iU < lineU.length; iU++) { // Initial processing loop on upper staff. lineUarr[iU] = noteTable(lineU[iU]); } //End of initial processing of upper staff. sumMeasure = 0, sumBatch = 0; for (var iL=0; iL < lineL.length; iL++) { // Initial processing loop on lower staff. lineLarr[iL] = noteTable(lineL[iL]); } //End of initial processing of lower staff. lineLarr[iL] = noteTable(""); // Prevents crash if there are fewer notes downstairs iL = 1; // Code to match parts and modify if necessary alert("Length upper = " + lineUarr.length + " length lower = " + lineLarr.length + " U lines " + lineU.length + " L lines " + lineL.length); for (iU=1; iU < lineUarr.length; iU++) { //First line is NWC header Look for |Note| with Stem=Up specfied, not Grace, no Space= result = lineUarr[iU].line.match(/\|Note\|Dur:.*(Grace)?.*Pos:([x#nbv]?)(-?\d*).*Stem=(Up|Down).*(Space=)?/) if ((result != null) && (result[1] == null) && (result[5] == null)) { while ((lineLarr[iL].dur > 0) && (lineUarr[iU].begPos > lineLarr[iL].begPos)) iL++; // Advance lower subscript until find same place in score if (lineLarr[iL].begPos == Number.POSITIVE_INFINITY) // Ran out of notes downstairs break; if (lineUarr[iU].begPos < lineLarr[iL].begPos) // If went past it (syncopation?) try next line continue;
TIA


Reply With Quote
Bookmarks