When i apply it it showing Script could not be translated from: |B|var rsiLength = 14|E| - indicator
// Inputs
var rsiLength = 14
var macdFastLength = 12
var macdSlowLength = 26
var macdSignalLength = 9
var atrLength = 14
var volumeFactor = 0.1
// Calculate indicators
var rsi = rsi(close, rsiLength)
var macd = macd(close, macdFastLength, macdSlowLength, macdSignalLength)
var atr = atr(atrLength)
var volume = volume * volumeFactor
// Define signals
var buySignal = rsi < 30 and macd.histogram > 0 and volume > atr
var sellSignal = rsi > 70 and macd.histogram < 0 and volume > atr
// Plot signals
plot(buySignal ? 50 : na, color=color.green, linewidth=3, style=plot.style_circles, title='Buy Signal')
plot(sellSignal ? 50 : na, color=color.red, linewidth=3, style=plot.style_circles, title='Sell Signal')
// Capital
strategy.risk = 0.01
strategy.entry("Long", strategy.long, when=buySignal, comment="Buy")
strategy.close("Long", when=sellSignal, comment="Sell")
Script could not be translated from: |B|var rsiLength = 14|E|
It tried to make a strategy which generates buy and sell signal but it showing this
Related
Add picture to objects from array table in Lua
I am creating 8 images using Cheat Engine Lua script and I want to add some pictures to the images from an array table. the_famous = { {photo = "AlbertEinstein.jpg", nickName = "einstein", actorName = "Albert Einstein", profession = "Physicist", creation = "Theory of relativity", nationality = "Germany", life = "14 March 1879 - 18 April 1955"}, {photo = "Mozart.jpg", nickName = "mozart", actorName = "Wolfgang Amadeus Mozart", profession = "Classical Music Composer", creation = "Symphony No.40", nationality = "Austria", life = "27 January 1756 – 5 December 1791"}, {photo = "Guevara.jpg", nickName = "guevara", actorName = "Ernesto 'Che' Guevara", profession = "Revolutionary", creation = "Cuban Revolution", nationality = "Cuba, Argentina ", life = "14 June 1928 - 9 October 1967"}, {photo = "BruceLee.jpg", nickName = "bruce lee", actorName = "Bruce Lee (Lee Jun Fan)", profession = "Martial Artist", creation = "Father of MMA", nationality = "Hongkong, America", life = "27 November 1940 - 20 July 1973"}, {photo = "Marilyn.jpg", nickName = "marilyn monroe", actorName = "Marilyn Monroe (Norma Jeane Mortenson)", profession = "Artist", creation = "The most famous sex symbol", nationality = "America", life = "1 June 1926 - 5 August 1962"}} function start() if #the_famous ~= 0 then the_famous.ItemIndex = 0 local idx = the_famous.ItemIndex for i = 1, 8 do local idx = tableTemp.ItemIndex local img = string.format('image1'..i) -- images name start with 'image11' till 'image18' local pic = the_famous[i].photo img.Picture.loadFromFile(path_to_images_stored..tostring(pic)) img.Hint = the_famous[i].nickname idx = idx + 1 end end end But the function above doesn't work. How I can do it properly?
Solved I have change my script: local cleft = 20 local ctop = 20 function getCategory(sender) local cat = sender.Name if cat == 'btnFamous' then while #tableTemp ~= 0 do rawset(tableTemp, #tableTemp, nil) end tableTemp = {} for z=1, #the_famous do tableTemp[z] = the_famous[z] end else return nil end for i = 1, 24 do local newImg = createImage(mPanel) newImg.width = 90 newImg.height = 90 newImg.top = ctop newImg.left = cleft newImg.Stretch = true newImg.Picture.loadFromFile(famous_img..tostring(tableTemp[i].photo)) newImg.showHint = true newImg.Hint = tostring(tableTemp[i].nickName) newImg.Name = 'pic00'..i cleft = cleft + 100 if i == 8 or i == 16 then cleft = 20 ctop = ctop + 100 end newImg.OnMouseEnter = function() hglight.visible=true hglight.setPosition(newImg.Left-10, newImg.Top-10) end newImg.OnMouseLeave = function() hglight.visible=false hglight.setPosition(newImg.Left-10, newImg.Top-10) end end end All works properly
Import many files .txt in SAS
I built a code to import multiple data simultaneously into SAS, but I want to improve it does anyone have any suggestions? filename indata pipe 'dir E:\Desafio_SAS\Dados /B'; data file_list; length arquivos$20.; infile indata truncover ; input arquivos $20.; call symput('num_files',_n_); arquivos=compress(arquivos,',.txt'); run; CRIANDO UMA MACRO POR PROC SQL PARA GUARDAR O NOME DOS ARQUIVOS proc sql; select arquivos into :lista separated by ' ' from file_list; quit; %let &lista; %macro importar(arquivo=); filename data "E:\Desafio_SAS\Dados\&arquivo..txt"; data &arquivo; infile data dlm=" " missover dsd firstobs=2; input v0 (v1 - v8) ($); format v0 F16.; run; %mend importar; %macro fileout; %do i=1 %to &num_files; %importar(arquivo=df&i); data df&i; set var_names df&i; run; %end; %mend fileout; %fileout; %macro excluiv0; %do i=1 %to &num_files; data _null_; data df&i(drop = v0); set df&i; run; %end; run; %mend excluiv0; %excluiv0; It's just part of the code.
You can use a wildcard in the infile file-specification. As long as all the files meeting the wildcard are the same layout, you can use a single input to read all the files. Example * create three text files having same fields; data _null_; file '%temp%\1.txt'; put '1 2 3 abc'; put '3 4 5 def'; file '%temp%\2.txt'; put '6 7 8 ghi'; put '9 10 11 jkl'; file '%temp%\3.txt'; put '12 13 14 xyz'; put '15 16 17 tuv'; run; * read all three using wildcard in infile. Save name of file whence * data cometh frometh; data want; length _filename_ $250; infile '%temp%\?.txt' filename=_filename_; length source $250; length a b c 8 s $20; source = _filename_; input a b c s; run; Wildcards are ?, 0 or 1 of any character *, any number of any character
t1 <- ttheme_default(core=list( fg_params=list(fontface=c("bold.italic")), bg_params = list(fill=c("green", "grey90","blue","red")))) grid.arrange(g1, tableGrob(iris[1:5, 1:4], theme = t1,, rows=NULL), g1, g1, nrow = 2)
--- title: "Column Orientation" output: flexdashboard::flex_dashboard --- ```{r setup, include=FALSE} library(ggplot2);library(knitr);library(kableExtra) library(flexdashboard);library(gridExtra);library(grid) ``` <style> .colored { background-color: #002080;} </style> Column{data-width=200} ------------------------------------- ### Chart 1{.colored} ```{r} gauge(10, min = 0, max = 100, sectors = gaugeSectors(colors = "#002080")) gauge(50, min = 0, max = 100, sectors = gaugeSectors(colors = "#002080")) gauge(20, min = 0, max = 100, sectors = gaugeSectors(colors = "#002080")) gauge(15, min = 0, max = 100, sectors = gaugeSectors(colors = "#002080")) gauge(5 , min = 0, max = 100, sectors = gaugeSectors(colors = "#002080")) ``` Column ------------------------------------- ### Chart 2 ```{r, include=FALSE} tt1 <- ttheme_default() tt2 <- ttheme_minimal() tt3 <- ttheme_minimal( core=list(bg_params = list(fill = blues9[1:4], col=NA), fg_params=list(fontface=3)), colhead=list(fg_params=list(col="navyblue", fontface=4L)), rowhead=list(fg_params=list(col="orange", fontface=3L))) tab <- grid.arrange(tableGrob(iris[c(1:4,1:2), c(1:3,1:2)], theme=tt3), nrow=1) graf <- ggplot(data=mtcars, aes(x=drat, y=disp, group=vs)) + geom_line() + ylab("") + geom_point() gg.gauge <- function(pos,breaks=c(0,10,25,100)) { get.poly <- function(a,b,r1=0.5,r2=1.0) { th.start <- pi*(1-a/100) th.end <- pi*(1-b/100) th <- seq(th.start,th.end,length=1000) x <- c(r1*cos(th),rev(r2*cos(th))) y <- c(r1*sin(th),rev(r2*sin(th))) return(data.frame(x,y)) } ggplot()+ geom_polygon(data=get.poly(breaks[1],breaks[2]),aes(x,y),fill="forestgreen", colour = "white", size = 1.2, alpha = 0.7) + geom_polygon(data=get.poly(breaks[2],breaks[3]),aes(x,y),fill="gold", colour = "white", size = 1.2, alpha = 0.7) + geom_polygon(data=get.poly(breaks[3],breaks[4]),aes(x,y),fill="red", colour = "white", size = 1.2, alpha = 0.7) + geom_polygon(data=get.poly(pos-1,pos+1,0.2),aes(x,y), colour = "white")+ annotate("text",x=0,y=0,label=pos,vjust=0,size=8,fontface="bold")+ coord_fixed()+ theme_bw()+ theme(axis.text=element_blank(), axis.title=element_blank(), axis.ticks=element_blank(), panel.grid=element_blank(), panel.border=element_blank()) } gg1 <- gg.gauge(2,breaks=c(0,10,25,100)) gg2 <- gg.gauge(5,breaks=c(0,10,25,100)) gg3 <- gg.gauge(7,breaks=c(0,10,25,100)) ``` ```{r, fig.width=9.5, fig.height=7} for (i in 1:5){ title1=textGrob("Test title TESTE", gp=gpar(fontface="bold", fontsize = 15)) lay <- rbind(c(3,3,4,4,5,5), c(1,1,1,1,1,1), c(1,1,1,1,1,1), c(2,2,2,2,2,2), c(2,2,2,2,2,2)) grid.arrange(graf, tab, gg1, gg2, gg3, top=title1, layout_matrix= lay) grid.rect(width = 1, height = 1, gp = gpar(lwd = 2, col = "black", fill = NA)) cat("\n") } ```
--- title: "BRADESCO" output: flexdashboard::flex_dashboard: orientation: rows --- ```{r setup, include=FALSE} library(ggplot2);library(knitr);library(kableExtra) library(flexdashboard); library(gridExtra);library(grid) ``` Geral {data-icon="fa-signal"} ===================================== ### Chat 1 ```{r} p1 <- qplot(mpg, wt, data = mtcars, colour = cyl) p2 <- qplot(mpg, data = mtcars) p3 <- qplot(mpg, data = mtcars, geom = "dotplot") lay <- rbind(c(1,1,1,2,2,2), c(3,3,3,3,3,3)) grid.arrange(p2, p3, p1, nrow = 2, layout_matrix= lay) ``` ### Table 1 ```{r} kable(mtcars[1:10, c(1:6,1:4)], caption = "Group Rows") %>% kable_styling("striped", full_width = F) %>% group_rows("Group 1", 4, 7) %>% group_rows("Group 2", 8, 10) ``` Por segmento {data-icon="fa-signal"} ===================================== <style> .colored { background-color: #002080;} </style> Row{data-height=200} ------------------------------------- ### Chart 1{.colored} ```{r, fig.width=55} dat = data.frame(count=rep(c(10, 60, 30),10), category=rep(c("A", "B", "C"),10), fator=c(1,2,3,4,5)) # Add addition columns, needed for drawing with geom_rect. dat$fraction = dat$count / sum(dat$count) dat = dat[order(dat$fraction), ] dat$ymax = cumsum(dat$fraction) dat$ymin = c(0, head(dat$ymax, n=-1)) p <- ggplot(dat, aes(x=2, y=fraction, fill=category))+ geom_bar(stat="identity", colour = "white", size = 2) + xlim(0, 2.5) + scale_fill_manual(values=c("#002080", "#002080", "white")) + coord_polar(theta = "y")+ labs(x=NULL, y=NULL)+ guides(fill=FALSE) + ylab("fsfagafs") + facet_wrap(~ fator,nrow = 1) + annotate("text", x = 0, y = 0, label = "WW", size = 20, colour = "white") + theme( plot.margin = margin(-1.1, 3.6, -1.1, 3.6, "cm"), panel.spacing = unit(30, "lines"), axis.ticks=element_blank(), axis.text=element_blank(), axis.title=element_blank(), panel.grid=element_blank(), plot.background = element_rect(fill = "#002080", colour="#002080"), panel.background = element_rect(fill = "#002080", colour="#002080"), strip.background = element_blank(), strip.text.x = element_blank()) p ``` Row ------------------------------------- ### Chart 2 {data-wight=900} ```{r, include=FALSE} tt1 <- ttheme_default() tt2 <- ttheme_minimal() tt3 <- ttheme_minimal( core=list(bg_params = list(fill = blues9[1:4], col=NA), fg_params=list(fontface=3)), colhead=list(fg_params=list(col="navyblue", fontface=4L)), rowhead=list(fg_params=list(col="orange", fontface=3L))) tab <- grid.arrange(tableGrob(iris[c(1:4,1:2), c(1:3,1:2)], theme=tt3), nrow=1) graf <- ggplot(data=mtcars, aes(x=drat, y=disp, group=vs)) + geom_line() + ylab("") + geom_point() gg.gauge <- function(pos,breaks=c(0,10,25,100)) { get.poly <- function(a,b,r1=0.5,r2=1.0) { th.start <- pi*(1-a/100) th.end <- pi*(1-b/100) th <- seq(th.start,th.end,length=1000) x <- c(r1*cos(th),rev(r2*cos(th))) y <- c(r1*sin(th),rev(r2*sin(th))) return(data.frame(x,y)) } ggplot()+ geom_polygon(data=get.poly(breaks[1],breaks[2]),aes(x,y),fill="forestgreen", colour = "white", size = 1.2, alpha = 0.7) + geom_polygon(data=get.poly(breaks[2],breaks[3]),aes(x,y),fill="gold", colour = "white", size = 1.2, alpha = 0.7) + geom_polygon(data=get.poly(breaks[3],breaks[4]),aes(x,y),fill="red", colour = "white", size = 1.2, alpha = 0.7) + geom_polygon(data=get.poly(pos-1,pos+1,0.2),aes(x,y), colour = "white")+ annotate("text",x=0,y=0,label=pos,vjust=0,size=8,fontface="bold")+ coord_fixed()+ theme_bw()+ theme(axis.text=element_blank(), axis.title=element_blank(), axis.ticks=element_blank(), panel.grid=element_blank(), panel.border=element_blank()) } gg1 <- gg.gauge(2,breaks=c(0,10,25,100)) gg2 <- gg.gauge(5,breaks=c(0,10,25,100)) gg3 <- gg.gauge(7,breaks=c(0,10,25,100)) ``` ```{r, fig.width=7.2, fig.height=7} for (i in 1:5){ title1=textGrob("Test title TESTE", gp=gpar(fontface="bold", fontsize = 15)) lay <- rbind(c(3,3,4,4,5,5), c(1,1,1,1,1,1), c(1,1,1,1,1,1), c(2,2,2,2,2,2), c(2,2,2,2,2,2)) grid.arrange(graf, tab, gg1, gg2, gg3, top=title1, layout_matrix= lay) grid.rect(width = 1, height = 1, gp = gpar(lwd = 2, col = "black", fill = NA)) cat("\n") } ``` ### Chart 2 ```{r} mydata = data.frame(x1 = c(1,2,3), x2 = c(9,8,7), label = c("description a", "description b", "description c")) ht = 5 wd1 = 5 wd2 = 12 gap = 0.1 nc = ncol(mydata) nr = nrow(mydata) x = rep(c(seq(0,(nc-2)*(wd1+gap), wd1+gap), (nc-2)*(wd1+gap) + gap + 0.5*(wd2+wd1)), nr) y = rep(seq(0,(nr-1)*(ht+gap), ht+gap), nc) %>% sort() h = rep(ht, nr * nc) w = rep(c(rep(wd1, nc-1), wd2), nr) info = as.vector(t(as.matrix(mydata[nr:1,]))) df = data.frame(x = x, y = y, h = h, w = w, info = info) ggplot(df, aes(x, y, height = h, width = w, label = info)) + geom_tile() + geom_text(color = "white", fontface = "bold") + coord_fixed() + scale_fill_brewer(type = "qual",palette = "Dark2") + theme_void() + guides(fill = F) ``` teste
Error: Cannot convert array of data to (class)
I'm still rather new to JS and GAS and I'm afraid I don't understand arrays real well yet. Your help is greatly appreciated. Prior to this script, I have another script that pulls information from a list into a spreadsheet that is formatted to look like an invoice. The user then makes changes to the invoice and saves that changes back again to the exact same line that the data was pulled from. This is simply a way of updating changes to the invoice in a user-friendly format. When I run my script below, I get an error saying that it "Cannot convert"...a list of the data in the array..." to (class)"...the name of the file. I'm afraid I don't know enough about array classes to solve this problem. I looked for other questions and answers to this same problem, but if I found one, I didn't understand it well enough to apply it to my situation. The error is happening on line 133 (oh, so close to running the whole script). function overwriteInvoice() { var ui = SpreadsheetApp.getUi(); var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Invoice"); //start change customer name into customer code var customerName = sheet.getRange('I2').getValue(); var ccsheet = ss.getSheetByName("CustomerCodes"); var lastRow = ccsheet.getLastRow(); //check how many rows it found Logger.log("lastRow: " + lastRow); var lookUp = ccsheet.getRange(2, 1, lastRow, 3).getValues(); for (nn=0; nn<lookUp.length; ++nn) { if (lookUp[nn][0] == customerName) {break} } var customerCode = lookUp[nn][1]; //check customer code to make sure it is returning correct info. Logger.log("customerCode: " + customerCode); //end change customer name into customer code //start build array var arrayOfData = []; arrayOfData[0] = sheet.getRange('G2');//invoiceorquote arrayOfData[1] = sheet.getRange('C10');//invoicequote number arrayOfData[2] = sheet.getRange('C9');//date arrayOfData[3] = customerCode;//customer code DON'T CHANGE THIS arrayOfData[4] = sheet.getRange('I9'); //joblotcode arrayOfData[5] = sheet.getRange('J27');//total arrayOfData[6] = sheet.getRange('L32');//invoice paid arrayOfData[7] = sheet.getRange('B30');//notes arrayOfData[8] = sheet.getRange('B13');//area13; arrayOfData[9] = sheet.getRange('D13');//description13; arrayOfData[10] = sheet.getRange('I13');//quantity13; arrayOfData[11] = sheet.getRange('J13');//units13; arrayOfData[12] = sheet.getRange('K13');//pricePerUnit13; arrayOfData[13] = sheet.getRange('L13');//subtotal13; arrayOfData[14] = sheet.getRange('B14');//area14; arrayOfData[15] = sheet.getRange('D14');//description14; arrayOfData[16] = sheet.getRange('I14');//quantity14; arrayOfData[17] = sheet.getRange('J14');//units14; arrayOfData[18] = sheet.getRange('K14');//pricePerUnit14; arrayOfData[19] = sheet.getRange('L14');//subtotal14; arrayOfData[20] = sheet.getRange('B15');//area15; arrayOfData[21] = sheet.getRange('D15');//description15; arrayOfData[22] = sheet.getRange('I15');//quantity15; arrayOfData[23] = sheet.getRange('J15');//units15 ; arrayOfData[24] = sheet.getRange('K15');//pricePerUnit15 ; arrayOfData[25] = sheet.getRange('L15');//subtotal15 ; arrayOfData[26] = sheet.getRange('B16');//area16 ; arrayOfData[27] = sheet.getRange('D16');//description16 ; arrayOfData[28] = sheet.getRange('I16');//quantity16 ; arrayOfData[29] = sheet.getRange('J16');//units16 ; arrayOfData[30] = sheet.getRange('K16');//pricePerUnit16 ; arrayOfData[31] = sheet.getRange('L16');//subtotal16 ; arrayOfData[32] = sheet.getRange('B17');//area17 ; arrayOfData[33] = sheet.getRange('D17');//description17 ; arrayOfData[34] = sheet.getRange('I17');//quantity17 ; arrayOfData[35] = sheet.getRange('J17');//units17 ; arrayOfData[36] = sheet.getRange('K17');//pricePerUnit17 ; arrayOfData[37] = sheet.getRange('L17');//subtotal17 ; arrayOfData[38] = sheet.getRange('B18');//area18 ; arrayOfData[39] = sheet.getRange('D18');//description18 ; arrayOfData[40] = sheet.getRange('I18');//quantity18 ; arrayOfData[41] = sheet.getRange('J18');//units18 ; arrayOfData[42] = sheet.getRange('K18');//pricePerUnit18 ; arrayOfData[43] = sheet.getRange('L18');//subtotal18 ; arrayOfData[44] = sheet.getRange('B19');//area19 ; arrayOfData[45] = sheet.getRange('D19');//description19 ; arrayOfData[46] = sheet.getRange('I19');//quantity19 ; arrayOfData[47] = sheet.getRange('J19');//units19 ; arrayOfData[48] = sheet.getRange('K19');//pricePerUnit19 ; arrayOfData[49] = sheet.getRange('L19');//subtotal19 ; arrayOfData[50] = sheet.getRange('B20');//area20 ; arrayOfData[51] = sheet.getRange('D20');//description20 ; arrayOfData[52] = sheet.getRange('I20');//quantity20 ; arrayOfData[53] = sheet.getRange('J20');//units20 ; arrayOfData[54] = sheet.getRange('K20');//pricePerUnit20 ; arrayOfData[55] = sheet.getRange('L20');//subtotal20 ; arrayOfData[56] = sheet.getRange('B21');//area21 ; arrayOfData[57] = sheet.getRange('D21');//description21 ; arrayOfData[58] = sheet.getRange('I21');//quantity21 ; arrayOfData[59] = sheet.getRange('J21');//units21 ; arrayOfData[60] = sheet.getRange('K21');//pricePerUnit21 ; arrayOfData[61] = sheet.getRange('L21');//subtotal21 ; arrayOfData[62] = sheet.getRange('B22');//area22 ; arrayOfData[63] = sheet.getRange('D22');//description22 ; arrayOfData[64] = sheet.getRange('I22');//quantity22 ; arrayOfData[65] = sheet.getRange('J22');//units22 ; arrayOfData[66] = sheet.getRange('K22');//pricePerUnit22 ; arrayOfData[67] = sheet.getRange('L22');//subtotal22 ; arrayOfData[68] = sheet.getRange('B23');//area23 ; arrayOfData[69] = sheet.getRange('D23');//description23 ; arrayOfData[70] = sheet.getRange('I23');//quantity23 ; arrayOfData[71] = sheet.getRange('J23');//units23 ; arrayOfData[72] = sheet.getRange('K23');//pricePerUnit23 ; arrayOfData[73] = sheet.getRange('L23');//subtotal23 ; arrayOfData[74] = sheet.getRange('B24');//area24 ; arrayOfData[75] = sheet.getRange('D24');//description24 ; arrayOfData[76] = sheet.getRange('I24');//quantity24 ; arrayOfData[77] = sheet.getRange('J24');//units24 ; arrayOfData[78] = sheet.getRange('K24');//pricePerUnit24 ; arrayOfData[79] = sheet.getRange('L24');//subtotal24 ; //end build array //start find correct row var searchFor = sheet.getRange("C10").getValue(); var invoiceRecord = ss.getSheetByName("InvoiceRecord"); var lastRow = invoiceRecord.getLastRow(); //verify last row Logger.log("lastRow: " + lastRow); //create an array of values to search var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues(); //start search the array for (jj=0; jj<searchArea.length; ++jj) { if (searchArea[jj][1]==searchFor) {break}; } var copyToRow = searchArea[jj]; //end find the correct row //ERROR! invoiceRecord.getRange(copyToRow, 1, 1, arrayOfData.length).setValues(arrayOfData); //ERROR! ui.alert('Invoice Changes Saved', ui.ButtonSet.OK); } Thank you so much for your help. Update I am so frustrated by this problem that I decided to take a different tact to narrow down the cause. I removed the array entirely and assigned each value to a variable in order to see if the array is the problem. Apparently, it is not. The results when I run this code now say error: "Cannot convert NaN to (class). (line 140, file "OverwriteExistingInvoice")" function overwriteInvoice() { var ui = SpreadsheetApp.getUi(); var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Invoice"); //start change customer name into customer code var customerName = sheet.getRange('I2').getValue(); var ccsheet = ss.getSheetByName("CustomerCodes"); var lastRow = ccsheet.getLastRow(); //check how many rows it found Logger.log("lastRow: " + lastRow); var lookUp = ccsheet.getRange(2, 1, lastRow-2, 3).getValues(); var nn=0 for (nn=0; nn<lookUp.length; ++nn) { if (lookUp[nn][0] == customerName) {break} } var customerCode = lookUp[nn][1]; //check customer code to make sure it is returning correct info. Logger.log("customerCode: " + customerCode); //end change customer name into customer code //start build array var column0 = sheet.getRange('G2').getValue();//invoiceorquote var column1 = sheet.getRange('C10').getValue();//invoicequote number var column2 = sheet.getRange('C9').getValue();//date var column3 = customerCode;//customer code DON'T CHANGE THIS var column4 = sheet.getRange('I9').getValue(); //joblotcode var column5 = sheet.getRange('J27').getValue();//total var column6 = sheet.getRange('L32').getValue();//invoice paid var column7 = sheet.getRange('B30').getValue();//notes var column8 = sheet.getRange('B13').getValue();//area13; var column9 = sheet.getRange('D13').getValue();//description13; var column10 = sheet.getRange('I13').getValue();//quantity13; var column11 = sheet.getRange('J13').getValue();//units13; var column12 = sheet.getRange('K13').getValue();//pricePerUnit13; var column13 = sheet.getRange('L13').getValue();//subtotal13; var column14 = sheet.getRange('B14').getValue();//area14; var column15 = sheet.getRange('D14').getValue();//description14; var column16 = sheet.getRange('I14').getValue();//quantity14; var column17 = sheet.getRange('J14').getValue();//units14; var column18 = sheet.getRange('K14').getValue();//pricePerUnit14; var column19 = sheet.getRange('L14').getValue();//subtotal14; var column20 = sheet.getRange('B15').getValue();//area15; var column21 = sheet.getRange('D15').getValue();//description15; var column22 = sheet.getRange('I15').getValue();//quantity15; var column23 = sheet.getRange('J15').getValue();//units15 ; var column24 = sheet.getRange('K15').getValue();//pricePerUnit15 ; var column25 = sheet.getRange('L15').getValue();//subtotal15 ; var column26 = sheet.getRange('B16').getValue();//area16 ; var column27 = sheet.getRange('D16').getValue();//description16 ; var column28 = sheet.getRange('I16').getValue();//quantity16 ; var column29 = sheet.getRange('J16').getValue();//units16 ; var column30 = sheet.getRange('K16').getValue();//pricePerUnit16 ; var column31 = sheet.getRange('L16').getValue();//subtotal16 ; var column32 = sheet.getRange('B17').getValue();//area17 ; var column33 = sheet.getRange('D17').getValue();//description17 ; var column34 = sheet.getRange('I17').getValue();//quantity17 ; var column35 = sheet.getRange('J17').getValue();//units17 ; var column36 = sheet.getRange('K17').getValue();//pricePerUnit17 ; var column37 = sheet.getRange('L17').getValue();//subtotal17 ; var column38 = sheet.getRange('B18').getValue();//area18 ; var column39 = sheet.getRange('D18').getValue();//description18 ; var column40 = sheet.getRange('I18').getValue();//quantity18 ; var column41 = sheet.getRange('J18').getValue();//units18 ; var column42 = sheet.getRange('K18').getValue();//pricePerUnit18 ; var column43 = sheet.getRange('L18').getValue();//subtotal18 ; var column44 = sheet.getRange('B19').getValue();//area19 ; var column45 = sheet.getRange('D19').getValue();//description19 ; var column46 = sheet.getRange('I19').getValue();//quantity19 ; var column47 = sheet.getRange('J19').getValue();//units19 ; var column48 = sheet.getRange('K19').getValue();//pricePerUnit19 ; var column49 = sheet.getRange('L19').getValue();//subtotal19 ; var column50 = sheet.getRange('B20').getValue();//area20 ; var column51 = sheet.getRange('D20').getValue();//description20 ; var column52 = sheet.getRange('I20').getValue();//quantity20 ; var column53 = sheet.getRange('J20').getValue();//units20 ; var column54 = sheet.getRange('K20').getValue();//pricePerUnit20 ; var column55 = sheet.getRange('L20').getValue();//subtotal20 ; var column56 = sheet.getRange('B21').getValue();//area21 ; var column57 = sheet.getRange('D21').getValue();//description21 ; var column58 = sheet.getRange('I21').getValue();//quantity21 ; var column59 = sheet.getRange('J21').getValue();//units21 ; var column60 = sheet.getRange('K21').getValue();//pricePerUnit21 ; var column61 = sheet.getRange('L21').getValue();//subtotal21 ; var column62 = sheet.getRange('B22').getValue();//area22 ; var column63 = sheet.getRange('D22').getValue();//description22 ; var column64 = sheet.getRange('I22').getValue();//quantity22 ; var column65 = sheet.getRange('J22').getValue();//units22 ; var column66 = sheet.getRange('K22').getValue();//pricePerUnit22 ; var column67 = sheet.getRange('L22').getValue();//subtotal22 ; var column68 = sheet.getRange('B23').getValue();//area23 ; var column69 = sheet.getRange('D23').getValue();//description23 ; var column70 = sheet.getRange('I23').getValue();//quantity23 ; var column71 = sheet.getRange('J23').getValue();//units23 ; var column72 = sheet.getRange('K23').getValue();//pricePerUnit23 ; var column73 = sheet.getRange('L23').getValue();//subtotal23 ; var column74 = sheet.getRange('B24').getValue();//area24 ; var column75 = sheet.getRange('D24').getValue();//description24 ; var column76 = sheet.getRange('I24').getValue();//quantity24 ; var column77 = sheet.getRange('J24').getValue();//units24 ; var column78 = sheet.getRange('K24').getValue();//pricePerUnit24 ; var column79 = sheet.getRange('L24').getValue();//subtotal24 ; //end build array //start find correct row var searchFor = sheet.getRange("C10").getValue(); var invoiceRecord = ss.getSheetByName("InvoiceRecord"); var lastRow = invoiceRecord.getLastRow(); //verify last row Logger.log("lastRow: " + lastRow); //create an array of values to search var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues(); //start search the array var jj=0 for (jj=0; jj<searchArea.length; ++jj) { if (searchArea[jj][1]==searchFor) {break}; } Logger.log('jj value: ' + jj); var copyToRow = searchArea[jj]; Logger.log('copyToRow: ' + copyToRow); //end find correct row //start copy over same entry //error on next line invoiceRecord.getRange(copyToRow-1, 1).setValue(column0); //error on above line ui.alert('Invoice Changes Saved', ui.ButtonSet.OK); } I really appreciate all the help thus far. I am about to tear my hair out! UPDATE This is the code that finally worked correctly. function overwriteInvoice() { var ui = SpreadsheetApp.getUi(); var ss = SpreadsheetApp.getActive(); var sheet = ss.getSheetByName("Invoice"); //start change customer name into customer code var customerName = sheet.getRange('I2').getValue(); var ccsheet = ss.getSheetByName("CustomerCodes"); var lastRow = ccsheet.getLastRow(); //check how many rows it found Logger.log("lastRow: " + lastRow); var lookUp = ccsheet.getRange(2, 1, lastRow-2, 3).getValues(); var nn=0 for (nn=0; nn<lookUp.length; ++nn) { if (lookUp[nn][0] == customerName) {break} } var customerCode = lookUp[nn][1]; //check customer code to make sure it is returning correct info. Logger.log("customerCode: " + customerCode); //end change customer name into customer code //start build array var arrayOfData = []; arrayOfData[0] = sheet.getRange('G2').getValue();//invoiceorquote arrayOfData[1] = sheet.getRange('C10').getValue();//invoicequote number arrayOfData[2] = sheet.getRange('C9').getValue();//date arrayOfData[3] = customerCode;//customer code DON'T CHANGE THIS arrayOfData[4] = sheet.getRange('I9').getValue(); //joblotcode arrayOfData[5] = sheet.getRange('J27').getValue();//total arrayOfData[6] = sheet.getRange('L32').getValue();//invoice paid arrayOfData[7] = sheet.getRange('B30').getValue();//notes arrayOfData[8] = sheet.getRange('B13').getValue();//area13; arrayOfData[9] = sheet.getRange('D13').getValue();//description13; arrayOfData[10] = sheet.getRange('I13').getValue();//quantity13; arrayOfData[11] = sheet.getRange('J13').getValue();//units13; arrayOfData[12] = sheet.getRange('K13').getValue();//pricePerUnit13; arrayOfData[13] = sheet.getRange('L13').getValue();//subtotal13; arrayOfData[14] = sheet.getRange('B14').getValue();//area14; arrayOfData[15] = sheet.getRange('D14').getValue();//description14; arrayOfData[16] = sheet.getRange('I14').getValue();//quantity14; arrayOfData[17] = sheet.getRange('J14').getValue();//units14; arrayOfData[18] = sheet.getRange('K14').getValue();//pricePerUnit14; arrayOfData[19] = sheet.getRange('L14').getValue();//subtotal14; arrayOfData[20] = sheet.getRange('B15').getValue();//area15; arrayOfData[21] = sheet.getRange('D15').getValue();//description15; arrayOfData[22] = sheet.getRange('I15').getValue();//quantity15; arrayOfData[23] = sheet.getRange('J15').getValue();//units15 ; arrayOfData[24] = sheet.getRange('K15').getValue();//pricePerUnit15 ; arrayOfData[25] = sheet.getRange('L15').getValue();//subtotal15 ; arrayOfData[26] = sheet.getRange('B16').getValue();//area16 ; arrayOfData[27] = sheet.getRange('D16').getValue();//description16 ; arrayOfData[28] = sheet.getRange('I16').getValue();//quantity16 ; arrayOfData[29] = sheet.getRange('J16').getValue();//units16 ; arrayOfData[30] = sheet.getRange('K16').getValue();//pricePerUnit16 ; arrayOfData[31] = sheet.getRange('L16').getValue();//subtotal16 ; arrayOfData[32] = sheet.getRange('B17').getValue();//area17 ; arrayOfData[33] = sheet.getRange('D17').getValue();//description17 ; arrayOfData[34] = sheet.getRange('I17').getValue();//quantity17 ; arrayOfData[35] = sheet.getRange('J17').getValue();//units17 ; arrayOfData[36] = sheet.getRange('K17').getValue();//pricePerUnit17 ; arrayOfData[37] = sheet.getRange('L17').getValue();//subtotal17 ; arrayOfData[38] = sheet.getRange('B18').getValue();//area18 ; arrayOfData[39] = sheet.getRange('D18').getValue();//description18 ; arrayOfData[40] = sheet.getRange('I18').getValue();//quantity18 ; arrayOfData[41] = sheet.getRange('J18').getValue();//units18 ; arrayOfData[42] = sheet.getRange('K18').getValue();//pricePerUnit18 ; arrayOfData[43] = sheet.getRange('L18').getValue();//subtotal18 ; arrayOfData[44] = sheet.getRange('B19').getValue();//area19 ; arrayOfData[45] = sheet.getRange('D19').getValue();//description19 ; arrayOfData[46] = sheet.getRange('I19').getValue();//quantity19 ; arrayOfData[47] = sheet.getRange('J19').getValue();//units19 ; arrayOfData[48] = sheet.getRange('K19').getValue();//pricePerUnit19 ; arrayOfData[49] = sheet.getRange('L19').getValue();//subtotal19 ; arrayOfData[50] = sheet.getRange('B20').getValue();//area20 ; arrayOfData[51] = sheet.getRange('D20').getValue();//description20 ; arrayOfData[52] = sheet.getRange('I20').getValue();//quantity20 ; arrayOfData[53] = sheet.getRange('J20').getValue();//units20 ; arrayOfData[54] = sheet.getRange('K20').getValue();//pricePerUnit20 ; arrayOfData[55] = sheet.getRange('L20').getValue();//subtotal20 ; arrayOfData[56] = sheet.getRange('B21').getValue();//area21 ; arrayOfData[57] = sheet.getRange('D21').getValue();//description21 ; arrayOfData[58] = sheet.getRange('I21').getValue();//quantity21 ; arrayOfData[59] = sheet.getRange('J21').getValue();//units21 ; arrayOfData[60] = sheet.getRange('K21').getValue();//pricePerUnit21 ; arrayOfData[61] = sheet.getRange('L21').getValue();//subtotal21 ; arrayOfData[62] = sheet.getRange('B22').getValue();//area22 ; arrayOfData[63] = sheet.getRange('D22').getValue();//description22 ; arrayOfData[64] = sheet.getRange('I22').getValue();//quantity22 ; arrayOfData[65] = sheet.getRange('J22').getValue();//units22 ; arrayOfData[66] = sheet.getRange('K22').getValue();//pricePerUnit22 ; arrayOfData[67] = sheet.getRange('L22').getValue();//subtotal22 ; arrayOfData[68] = sheet.getRange('B23').getValue();//area23 ; arrayOfData[69] = sheet.getRange('D23').getValue();//description23 ; arrayOfData[70] = sheet.getRange('I23').getValue();//quantity23 ; arrayOfData[71] = sheet.getRange('J23').getValue();//units23 ; arrayOfData[72] = sheet.getRange('K23').getValue();//pricePerUnit23 ; arrayOfData[73] = sheet.getRange('L23').getValue();//subtotal23 ; arrayOfData[74] = sheet.getRange('B24').getValue();//area24 ; arrayOfData[75] = sheet.getRange('D24').getValue();//description24 ; arrayOfData[76] = sheet.getRange('I24').getValue();//quantity24 ; arrayOfData[77] = sheet.getRange('J24').getValue();//units24 ; arrayOfData[78] = sheet.getRange('K24').getValue();//pricePerUnit24 ; arrayOfData[79] = sheet.getRange('L24').getValue();//subtotal24 ; //end build array //start find correct row var searchFor = sheet.getRange("C10").getValue(); var invoiceRecord = ss.getSheetByName("InvoiceRecord"); var lastRow = invoiceRecord.getLastRow(); //verify last row Logger.log("lastRow: " + lastRow); //create an array of values to search var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues(); //start search the array var jj=0 for (jj=0; jj<searchArea.length; ++jj) { if (searchArea[jj][1]==searchFor) {break}; } Logger.log('jj value: ' + jj); var copyToRow = jj+4; Logger.log('copyToRow: ' + copyToRow); //end find correct row //start copy over the same entry var outerArray = []; outerArray.push(arrayOfData); invoiceRecord.getRange(copyToRow, 1, 1, 80).setValues(outerArray); ui.alert('Invoice Changes Saved', ui.ButtonSet.OK); }
Add the getValue() method to all of the lines with: arrayOfData[x] = sheet.getRange('XX');//What to get Right now, a range object is being put into the array, and not a value. Should be: arrayOfData[x] = sheet.getRange('XX').getValue();//Note Create an outer array, and put arrayOfData into it: var outerArray = []; outerArray.push(arrayOfData); //getRange(Start row, start column, number of rows, number of columns) invoiceRecord.getRange(copyToRow, 1, outerArray.length, outerArray[0].length) .setValues(outerArray); The setValues() method must have a two dimensional array. If this is for just one row of data, then there will only be one inner array.
Optimize matrices operations
I'm optimizing via Genetic Algorithm a machine simulator (of a MultiheadWeigher machine) in order to solve the well known "Setup problem". I based all the code on matricies but with the multiproduct case I think there is still some inefficiency... Code function [f] = MHW(position_matrix, HA, HB, HC) global W_best_tot global Function global n_b_global nComb = size(position_matrix,1); dim = size(position_matrix,2); WL = 241; %SIMULATIONS VARIABLES alpha = 0.123; nSim = 3000; CellUncertainty = 0.5 * 10^(-6); %// Define Product Hopper allocation WT_A = 130; WL_A = 129; WT_B = 30; WL_B = 29; %HC = 2; WT_C = 90; WL_C = 89; %// COMBINATION MATRIX CombinantionMatrix_A = combn([0 1], HA); CombinantionMatrix_B = combn([0 1], HB); CombinantionMatrix_C = combn([0 1], HC); if HA == 1 CombinantionMatrix_A = CombinantionMatrix_A.'; end if HB == 1 CombinantionMatrix_B = CombinantionMatrix_B.'; end if HC == 1 CombinantionMatrix_C = CombinantionMatrix_C.'; end CombinantionMatrix_A_Transp = CombinantionMatrix_A.'; CombinantionMatrix_B_Transp = CombinantionMatrix_B.'; CombinantionMatrix_C_Transp = CombinantionMatrix_C.'; % OBJECTIVE FUNCTION COST COEFFICIENTS Cu_A = 0.03; c_p = 0.6; c_f = 734; c_l = 3.2; Cu_B = 0.09; Cu_C = 0.04; [HopperWeight UncertainWeight] = Weight(nComb, dim, alpha, ... position_matrix, CellUncertainty); HopperWeight_A = HopperWeight(:,1:HA); HopperWeight_B = HopperWeight(:,HA+1:HA+HB); HopperWeight_C = HopperWeight(:,HA+HB+1:HA+HB+HC); UncertainWeight_A = UncertainWeight(:,1:HA); UncertainWeight_B = UncertainWeight(:,HA+1:HA+HB); UncertainWeight_C = UncertainWeight(:,HA+HB+1:HA+HB+HC); W_best_tot = zeros(nComb, nSim); W_best_ABC = zeros(nComb, 3, nSim); for ii=1:nSim W_A = HopperWeight_A * CombinantionMatrix_A_Transp; W_B = HopperWeight_B * CombinantionMatrix_B_Transp; W_C = HopperWeight_C * CombinantionMatrix_C_Transp; W_Unc_A = UncertainWeight_A * CombinantionMatrix_A_Transp; W_Unc_B = UncertainWeight_B * CombinantionMatrix_B_Transp; W_Unc_C = UncertainWeight_C * CombinantionMatrix_C_Transp; [~,comb_A] = min(abs(W_Unc_A - WT_A),[],2); [~,comb_B] = min(abs(W_Unc_B - WT_B),[],2); [~,comb_C] = min(abs(W_Unc_C - WT_C),[],2); W_best_A = W_A(sub2ind_mod(size(W_A),1:size(W_A,1),comb_A.')).'; W_best_B = W_B(sub2ind_mod(size(W_B),1:size(W_B,1),comb_B.')).'; W_best_C = W_C(sub2ind_mod(size(W_C),1:size(W_C,1),comb_C.')).'; W_best_ABC(:,:,ii) = [W_best_A W_best_B W_best_C]; W_best_tot(:,ii) = sum(W_best_ABC(:,:,ii),2); [HopperWeight_2_A UncertainWeight_2_A] = Weight(nComb, HA, alpha, ... position_matrix(:,1:HA), CellUncertainty); [HopperWeight_2_B UncertainWeight_2_B] = Weight(nComb, HB, alpha, ... position_matrix(:,HA+1:HA+HB), CellUncertainty); [HopperWeight_2_C UncertainWeight_2_C] = Weight(nComb, HC, alpha, ... position_matrix(:,HA+HB+1:HA+HB+HC), CellUncertainty); idx = CombinantionMatrix_A(comb_A,:)~=0; HopperWeight_A(idx) = HopperWeight_2_A(idx); UncertainWeight_A(idx) = UncertainWeight_2_A(idx); idx = CombinantionMatrix_B(comb_B,:)~=0; HopperWeight_B(idx) = HopperWeight_2_B(idx); UncertainWeight_B(idx) = UncertainWeight_2_B(idx); idx = CombinantionMatrix_C(comb_C,:)~=0; HopperWeight_C(idx) = HopperWeight_2_C(idx); UncertainWeight_C(idx) = UncertainWeight_2_C(idx); clear HopperWeight_2_A HopperWeight_2_B HopperWeight_2_C ... UncertainWeight_2_A UncertainWeight_2_B UncertainWeight_2_C; end n_b = logical(W_best_tot >= WL); n_bA = logical(reshape(W_best_ABC(:,1,:), nComb, nSim) >= WL_A); n_bB = logical(reshape(W_best_ABC(:,2,:), nComb, nSim) >= WL_B); n_bC = logical(reshape(W_best_ABC(:,3,:), nComb, nSim) >= WL_C); n_b_global = sum(n_b .* n_bA .* n_bB .* n_bC, 2); GAvg_A = sum(reshape(W_best_ABC(:,1,:), nComb, nSim).*(reshape(... W_best_ABC(:,1,:), nComb, nSim) > WT_A),2)./sum(reshape(... W_best_ABC(:,1,:), nComb, nSim) > WT_A,2); GAvg_B = sum(reshape(W_best_ABC(:,2,:), nComb, nSim).*(reshape(... W_best_ABC(:,2,:), nComb, nSim) > WT_B),2)./sum(reshape(... W_best_ABC(:,2,:), nComb, nSim) > WT_B,2); GAvg_C = sum(reshape(W_best_ABC(:,3,:), nComb, nSim).*(reshape(... W_best_ABC(:,3,:), nComb, nSim) > WT_C),2)./sum(reshape(... W_best_ABC(:,3,:), nComb, nSim) > WT_C,2); f = Cu_A .* GAvg_A + Cu_B .* GAvg_B + Cu_C .* GAvg_C + (nSim./... n_b_global) .* c_p + (c_f./n_b_global) + ((nSim - n_b_global)./... n_b_global) .* c_l; Function = f; Profiler This is the Main Profiler and these are: the MHW function and the Weight function. The main problems are in the Weight since it's called 3000times for each GA generation...Above the Weight function code: Weight Function Code function [ HopperWeight UncertainWeight ] = Weight( nComb, H, alpha, AllComb, CellUncertainty ) HopperWeight = randn(nComb,H) * alpha; HopperWeight = (1+HopperWeight) .* AllComb; idx = HopperWeight<0; random = randn(sum(idx(:)), 1); HopperWeight(idx) = random .* ((1+alpha) .* AllComb(idx)); %ADD ERROR RandomizeUncertainty = randn(nComb,H) * CellUncertainty; UncertainWeight = abs((1+RandomizeUncertainty) .* HopperWeight); end Is there something that I am missing in order to optimize better the Weight function and in general the time consuming part in the MHW function? (If you need the GA launcher in order to try the MHW function use THIS code) TIA
lights out game using CORONA SDK
am trying to devalope a lights out game with CORONA SDK but am not able to figure out a way for looping it !!! how many functions to create and the way to keep this going here is my code (its dummy but a friend gave it to me as am trying to go on from there ) obj = nil px = 35 py = 50 r = 22 xi = 60 yi = 60 x1y1 = display.newCircle(px+xi*0,py+yi*0,r) x1y1.id = "x1y1" x2y1 = display.newCircle(px+xi*1,py+yi*0,r) x2y1.id = "x2y1" x3y1 = display.newCircle(px+xi*2,py+yi*0,r) x3y1.id = "x3y1" x4y1 = display.newCircle(px+xi*3,py+yi*0,r) x4y1.id = "x4y1" x5y1 = display.newCircle(px+xi*4,py+yi*0,r) x5y1.id = "x5y1" x1y2 = display.newCircle(px+xi*0,py+yi*1,r) x1y2.id = "x1y2" x2y2 = display.newCircle(px+xi*1,py+yi*1,r) x2y2.id = "x2y2" x3y2 = display.newCircle(px+xi*2,py+yi*1,r) x3y2.id = "x3y2" x4y2 = display.newCircle(px+xi*3,py+yi*1,r) x4y2.id = "x4y2" x5y2 = display.newCircle(px+xi*4,py+yi*1,r) x5y2.id = "x5y2" x1y3 = display.newCircle(px+xi*0,py+yi*2,r) x1y3.id = "x1y3" x2y3 = display.newCircle(px+xi*1,py+yi*2,r) x2y3.id = "x2y3" x3y3 = display.newCircle(px+xi*2,py+yi*2,r) x3y3.id = "x3y3" x4y3 = display.newCircle(px+xi*3,py+yi*2,r) x4y3.id = "x4y3" x5y3 = display.newCircle(px+xi*4,py+yi*2,r) x5y3.id = "x5y3" x1y4 = display.newCircle(px+xi*0,py+yi*3,r) x1y4.id = "x1y4" x2y4 = display.newCircle(px+xi*1,py+yi*3,r) x2y4.id = "x2y4" x3y4 = display.newCircle(px+xi*2,py+yi*3,r) x3y4.id = "x3y4" x4y4 = display.newCircle(px+xi*3,py+yi*3,r) x4y4.id = "x4y4" x5y4 = display.newCircle(px+xi*4,py+yi*3,r) x5y4.id = "x5y4" x1y5 = display.newCircle(px+xi*0,py+yi*4,r) x1y5.id = "x1y5" x2y5 = display.newCircle(px+xi*1,py+yi*4,r) x2y5.id = "x2y5" x3y5 = display.newCircle(px+xi*2,py+yi*4,r) x3y5.id = "x3y5" x4y5 = display.newCircle(px+xi*3,py+yi*4,r) x4y5.id = "x4y5" x5y5 = display.newCircle(px+xi*4,py+yi*4,r) x5y5.id = "x5y5" bb = {x1y1,x2y1,x3y1,x4y1,x5y1,x1y2,x2y2,x3y2,x4y2,x5y2,x1y3,x2y3,x3y3,x4y3,x5y3,x1y4,x2y4,x3y4,x4y4,x5y4,x1y5,x2y5,x3y5,x4y5,x5y5} iClicked = 0 function click(e) if(e.phase == "ended") then --circleID = e.target.id --whichCircle() print(e.target.id) obj = e.target for u=1,25 do if(obj==bb[u]) then iClicked = u end end if((iClicked-5) > 0 and (iClicked-5) < 26) then bb[iClicked-5]:setFillColor(1,0,0) end if((iClicked-1) > 0 and (iClicked-1) < 26) then bb[iClicked-1]:setFillColor(1,0,0) end obj:setFillColor(1,0,0) if((iClicked+1) > 0 and (iClicked+1) < 26) then bb[iClicked+1]:setFillColor(1,0,0) end if((iClicked+5) > 0 and (iClicked+5) < 26) then bb[iClicked+5]:setFillColor(1,0,0) end end end for k=1,25 do bb[k]:addEventListener("touch",click) end its all about having 25 circles and lighting them on and off but it doesnt seem to work for me any good help will be great Thanks
local myCircles = {} for y = 1, 5 do myCircles[y] = {} for x = 1, 5 do myCircles[y][x] = display.newCircle(px+xi*0,py+yi*4,r) myCircles[y][x].id = .id = "x" .. x .. "y" .. y end end or something like that. Rob