-=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- (c) WidthPadding Industries 1987 0|465|0 -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- -=+=- Socoder -> Blitz -> array Problem Posted : Saturday, 07 January 2012, 19:06 dna Hey. I'm trying to pass an array into a function and change certain characters within the string. This code is giving me an error. Is it the square bracket? Function INS\$(E\$) For J=1 To 6:For S=1 To Len(E\$[J]) If Mid\$(E\$[J],S,1)="B" Or Mid\$(E\$[J],S,1)="b" Mid\$(E\$[J],S,1)="/" EndIf Next Next End Function Dim R\$ For K=1 To 6:W=Rand(10,30): For TT= 1 To W:Q=Rand(26)+64 R\$[K]=R\$[K]+Chr\$(Q) Next Next For O=1 To 6 Print R\$[O]:Print INS\$(R\$[O]) Next --v -=-=- DNA Posted : Sunday, 08 January 2012, 12:00 bram32 Hey dna, I think it is the assignment to Mid\$ that doesn't work: Mid\$(E\$[J],S,1)="/" Should be something like: E\$[J] = Left\$(E\$[j],S-1) + "/" + Mid\$(E\$[j],S+1) Posted : Sunday, 08 January 2012, 20:54 dna A type mismatch now Function INS(E\$) Local J:Local S For J=1 To 6:For S=1 To Len(E\$[J]) If Mid\$(E\$[J],S,1)="B" Or Mid\$(E\$[J],S,1)="b" E\$[J]=Mid\$(E\$[J],1,S-1)+"/"+Mid\$(E\$[J],S+1) EndIf Next Next End Function Local R\$ ;Local K For K=1 To 6:W=Rand(10,30): For TT= 1 To W:Q=Rand(26)+64 R\$[K]=R\$[K]+Chr\$(Q) Next Next For O=1 To 6 Print R\$[O]:;Print INS\$(R\$[O]) Next --v The dim does not work. Does Blitz pass string arrays? -=-=- DNA Posted : Monday, 09 January 2012, 16:04 Evil Roy Ferguso Blitz's array support is anemic. You can pass string arrays to methods, but the so called "blitzarrays" break if you specify the type anywhere but declaration. That is to say, the following will work: Function INS(E\$) Local J:Local S For J=1 To 6:For S=1 To Len(E[J]) If Mid\$(E[J],S,1)="B" Or Mid\$(E[J],S,1)="b" E[J]=Mid\$(E[J],1,S-1)+"/"+Mid\$(E[J],S+1) EndIf Next Next End Function Local R\$ ;Local K For K=1 To 6:W=Rand(10,30): For TT= 1 To W:Q=Rand(26)+64 R[K]=R[K]+Chr(Q) Next Next For O=1 To 6 Print R[O]:;Print INS\$(R[O]) Next --v No idea what you're doing, though... Posted : Monday, 09 January 2012, 19:15 dna Thanks Evil One Still, It compiles but does not pass the array. Must be some funny syntax. the program will replace any occurrence of Upper or Lower case B with a "/". From there it will do something else. I might be able to get the result using integers instead of passing the string to the function. Just compare the integer to the "/" equivalent. -=-=- DNA Posted : Monday, 09 January 2012, 22:13 Retro I'm no Blitz expert, so apologies if this is utter crap. It seems to me you could wrap the string array in a custom type. This would be passed by reference, e.g. Const Max = 5 Type StringArray Field s\$[Max] End Type Function Dump(t.StringArray) For i = 1 To Max Print t\s[i] Next End Function o.StringArray = New StringArray o\s = "one" o\s = "two" o\s = "three" o\s = "four" o\s = "five" Dump(o) --v Posted : Tuesday, 10 January 2012, 19:27 dna That probably is the best method (no pun) for doing what I'm attempting. I did want to know the square bracket string array syntax though. -=-=- DNA Posted : Tuesday, 10 January 2012, 20:05 Retro I guess if you use that method, you may as well not use an array at all. i.e. just use the built-in type iterators. They're stored in a linked-list, so effectively you'd have a dynamic array. Posted : Tuesday, 10 January 2012, 20:53 dna You are right again but the algorithm was created to test the use of passing those square bracket arrays. It's undocumented in some versions of BB I'll learn types then. -=-=- DNA Posted : Tuesday, 10 January 2012, 21:05 Evil Roy Ferguso Passing in the array works; the line doing it was just commented out in your example above and I did not change it back. Posted : Tuesday, 10 January 2012, 21:31 dna I removed the comment and the string array did not pass. I got a Variable type mismatch error. -=-=- DNA Posted : Tuesday, 10 January 2012, 22:42 Evil Roy Ferguso That's because you're passing in a single element of the array with INS(R) instead of the array, when what you need is just INS®. You also can't print the result of that, since it doesn't return anything. Posted : Wednesday, 11 January 2012, 21:52 dna Found my syntax error Graphics 800,600,0,2 SeedRnd MilliSecs() Local INFO\$ INFO="JBBBBL" For XX=2 To 10:Q=Rand(15,40) For X2= 1 To Q INFO[XX]=INFO[XX]+Chr(Rand(26)+64) Next Next For xx=1 To 16:Print INFO[XX]:Next CHECK(INFO) Function CHECK(E\$) For X=1 To 10: For Y1=1 To Len(E[X]) If Mid\$(E[X],Y1,1)="B" E[X]=Left\$(E[X],Y1-1)+"*"+Mid\$(E[X],Y1+1) EndIf Next Print e[X] Next End Function WaitKey:End --v This is right. -=-=- DNA Posted : Thursday, 12 January 2012, 02:36 Retro Can't you just use the Replace\$ function? Function CHECK(E\$) For X = 1 To 16 E[X] = Replace(E[X],"B","*") Print E[X] Next End Function --v Posted : Thursday, 12 January 2012, 11:54 dna Yes I could have. I never knew the command existed before. That looks easier than using the mid\$ function. What I wrote is probably the same somewhere inside the REPLACE function. -=-=- DNA Posted : Thursday, 12 January 2012, 17:13 Retro Unlikely. The library functions would be C/C++ not BlitzBasic. Posted : Thursday, 12 January 2012, 19:02 dna You're right again but I meant the logistics of how it works. thanks for pointing that out to me. I have never really read the B3D manual. -=-=- DNA