Solved

Manipulate arrays in C#

Posted on 2006-11-05
27
243 Views
Last Modified: 2010-04-16
Can some please help me? I need the following code

[
     [null,'dasdas','_self','sada',
          [null,'dasdas','_self','sada',
               [null,'dasdas','_self','sada'],
               [null,'dasdas','_self','sada',
                    [null,'dasdas','_self','sada'],
                    [null,'dasdas','_self','sada'],
                    [null,'dasdas','_self','sada']
               ],
               [null,'dasdas','_self','sada']
          ]
     ],
     [null,'dasdas','_self','sada',
          [null,'dasdas','_self','sada'],
          [null,'dasdas','_self','sada'],
          [null,'dasdas','_self','sada',
               [null,'dasdas','_self','sada'],
               [null,'dasdas','_self','sada'],
               [null,'dasdas','_self','sada']
          ]
     ],
     [null,'dasdas','_self','sada']
];

===============================================================================
Changed to the following code
===============================================================================

[
     [null,'1', '1','dasdas','_self','sada',
          [null,'2','1','dasdas','_self','sada',
          [null,'3','1','dasdas','_self','sada'],
               [null,'4','3','dasdas','_self','sada',
                    [null,'5','4','dasdas','_self','sada'],
                    [null,'6','4','dasdas','_self','sada'],
                    [null,'7','4','dasdas','_self','sada']
          ],
          [null,'8','1','dasdas','_self','sada']
          ]
     ],
     [null,'9','9','dasdas','_self','sada',
          [null,'10','9','dasdas','_self','sada'],
          [null,'11','9','dasdas','_self','sada'],
               [null,'12','11','dasdas','_self','sada',
                    [null,'13','12','dasdas','_self','sada'],
                    [null,'14','12','dasdas','_self','sada'],
                    [null,'15','12','dasdas','_self','sada']
          ]
     ],
     ["Page",'16','16','dasdas','_self','sada']
];

===============================================================================
The 2nd and 3rd elements off each array has a number similar to an ID, ParentID
===============================================================================

It should produce a ID/ParentID relationship.

As you can see, the 2nd element is incremented by 1, the 3rd is the ParentID. The code is something I just mocked up, an I prefer to have the ID's, ParentID to be the last items, rather then 2nd and 3rd.

I really do hope I've made sense here, and I would very much like to have your help in the problem.
Many thanks
Mousemat24
0
Comment
Question by:mousemat24
  • 16
  • 11
27 Comments
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
to insert in an array at index iPos with 0 <= iPos < Length, you should do:

Length = <something>;
iPos = <somethingElse>;
int[Length] arr = new int[Length];
// insert at iPos
int[] tmpArr = new  int[Length+1]
Array.Copy(arr, 0, tmpArr, 0, iPos-1 );
tmpArr[iPos] = <something>;
Array.Copy( arr, iPos, tmpArr, iPos+1, Length - iPos );
arr = tmpArr;

of course things would be a lot easier if instead of arrays you would use ArrayList or the generics from .net2.0 List(Type)
with lists you would only need to do a list.Insert()

hth,
A.



0
 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici

I'm new to C#, so please bear with me. The code you've written, does it sort out my problem? i.e. will it produce the following code. I would really be grateful if you can help me with this.

[
     [null,'1', '1','dasdas','_self','sada',
          [null,'2','1','dasdas','_self','sada',
          [null,'3','1','dasdas','_self','sada'],
               [null,'4','3','dasdas','_self','sada',
                    [null,'5','4','dasdas','_self','sada'],
                    [null,'6','4','dasdas','_self','sada'],
                    [null,'7','4','dasdas','_self','sada']
          ],
          [null,'8','1','dasdas','_self','sada']
          ]
     ],
     [null,'9','9','dasdas','_self','sada',
          [null,'10','9','dasdas','_self','sada'],
          [null,'11','9','dasdas','_self','sada'],
               [null,'12','11','dasdas','_self','sada',
                    [null,'13','12','dasdas','_self','sada'],
                    [null,'14','12','dasdas','_self','sada'],
                    [null,'15','12','dasdas','_self','sada']
          ]
     ],
     ["Page",'16','16','dasdas','_self','sada']
];

0
 

Author Comment

by:mousemat24
Comment Utility
Agarici, I've also posted this as a Javascript question. Do you think you can help me out, I'm really panicing here, and I need this working ASAP.
Thanks man
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
do you use .net 2.0 or 1.1?
the data that you have posted, is it hold in an array or an arrayList?
do you have some sample code? How is the data structure declared?

the code i've posted will produce that output but it need to be adapted to your specific problem.
0
 

Author Comment

by:mousemat24
Comment Utility
Agarici

How good is your JS knowledge? Because the acually array is written is this really cool menu builder program:

http://jscook.yuanheng.org/JSCookMenu/MenuBuilder.html

I'm using that to produce the array.

I'm using VS2005/C#/ASP.NET 2

In a nut shell, I'm taking the menu builder and converting it to .NET. I've got it to work, but I want to add the ID/ParentID. The reason why is that I can use VS treeview navigation. I've looked at this site

http://aspalliance.com/732

thats why I want a ID/ParentID.

I hope this makes sense?
Thanks Agarici, I really do hope you can help me out
0
 

Author Comment

by:mousemat24
Comment Utility
Then once you've managed to get it to work, I can then use the following code to put it into a SQL db:

yourTextBox.Text    =   to the array



string allEntries = yourTextBox.Text;
int index = allEntries.IndexOf("[");  // detect start of data
if (index>=0)
{
    allEntries = allEntries.Remove(0,index+1);
    index = allEntries.IndexOf("]]"); // detect end of data
    if (index>=0)
    {
         allEntries.Remove(index+1);
         string[] records = allEntries.Split(",".ToCharArray());

         foreach(string record in records)
         {
              string values = record.Replace('[','(').Replace(']',')');
              string query = "INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description) VALUES"+values;
              // now you have the query string, use it!
         }
    } else
         // error, no end found, do something
}
else
    // There is not data in your textbox, do something
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
well... i would suggest to you this: add the id/parentId values when you insert into the db.
meaning : you extract the data from your array like you already do. for each menu item (db row) generate an unique id. and use that id an the parent id into the insert query.

like the code bellow ;)

            Console.WriteLine(page);
            int itemId = 1;
            int parentId = 0;
            int crtPos = 0;

            string allEntries = page.Replace("\n", string.Empty);
            allEntries = allEntries.Replace("\r", string.Empty).Replace(" ", string.Empty).Replace("\t", string.Empty);

            string[] values = allEntries.Split('[');
            string crtValue = string.Empty;
            string query = string.Empty;

            ArrayList parents = new ArrayList();

            for ( int i = 0 ; i < values.Length ; i++ )
            {
                crtValue = values[i];

                if ( crtValue.Length == 0 )
                    continue;

                itemId ++;
                parentId = itemId;

                crtPos = crtValue.IndexOf(']');
                if ( crtPos == -1 )
                {
                    if ( parents.Count > 0 )
                        parentId = (int)parents[parents.Count - 1];
                    parents.Add(itemId);
                }
                else
                {
                    crtValue = crtValue.Remove(crtPos, 1);
                    crtPos = crtValue.IndexOf(']');
                    if ( parents.Count > 0 )
                    {
                        parentId = (int)parents[parents.Count - 1];
                    }
                    while ( crtPos != -1 )
                    {
                        if ( parents.Count > 0 )
                        {
                            parents.RemoveAt(parents.Count - 1);
                        }
                        crtValue = crtValue.Remove(crtPos, 1);
                        crtPos = crtValue.IndexOf(']');
                    }
                }

                query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES ({0}{1},{2})", values, id, parentId);
               
                // execute query string formated above.


            }


hth,
A.
0
 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici

Thanks very much for helping me out, really am grateful for your help!!! As I said my C#/ASP.NET knowledge isnt that great, So please bear with me if I ask stupid questions.

The code you've written is great, but I cant test it as I get an error:

The name 'id' does not exist in the current context

I've created a string (hope thats ok?)

string page = "[[null,'dasdas','_self','sada',[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada']],[null,'dasdas','_self','sada']]],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada']]],[null,'dasdas','_self','sada']]";

Do you think its possible to have a variable that contains the revised array with the correct ID's/ParentID's? You're probably correct with what you've mentioned above, but I'm not that good with .NET. So can you please help me in getting the new array stored as a new variable?

Thanks Agarici, just wish my knowledge of .NET was as good as yours
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
yes, my mistake ;)

instead of id in

query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES ({0}{1},{2})", values, id, parentId);

should be 'itemId'
meaning:

query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES ({0}{1},{2})", values, itemId, parentId);

yes, 'page' variable should contain the array as you posted it.

about creating a new string variable with the array containing the id/parentid... it is possible, but if your purpose is to store the data in the db, its not usefull, it only complicates the things.

but as i said it is posible:
          Console.WriteLine(page);
            int itemId = 1;
            int parentId = 0;
            int crtPos = 0;

            string allEntries = page.Replace("\n", string.Empty);
            allEntries = allEntries.Replace("\r", string.Empty).Replace(" ", string.Empty).Replace("\t", string.Empty);

            string[] values = allEntries.Split('[');
            string crtValue = string.Empty;
            string query = string.Empty;
           
            string initialCrtValue = string.Empty;
            string paveWithIdAndParentId = string.Empty;

            ArrayList parents = new ArrayList();

            for ( int i = 0 ; i < values.Length ; i++ )
            {
                crtValue = values[i];

                if ( crtValue.Length == 0 )
                    continue;
               
                initialCrtValue = crtValue;

                itemId ++;
                parentId = itemId;

                crtPos = crtValue.IndexOf(']');
                if ( crtPos == -1 )
                {
                    if ( parents.Count > 0 )
                        parentId = (int)parents[parents.Count - 1];
                    parents.Add(itemId);
                }
                else
                {
                    crtValue = crtValue.Remove(crtPos, 1);
                    crtPos = crtValue.IndexOf(']');
                    if ( parents.Count > 0 )
                    {
                        parentId = (int)parents[parents.Count - 1];
                    }
                    while ( crtPos != -1 )
                    {
                        if ( parents.Count > 0 )
                        {
                            parents.RemoveAt(parents.Count - 1);
                        }
                        crtValue = crtValue.Remove(crtPos, 1);
                        crtPos = crtValue.IndexOf(']');
                    }
                }

                query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES ({0}{1},{2})", values, id, parentId);
               
                // execute query string formated above.
                // ...

               int firstComaPos = initialCrtValue.IndexOf( ',' );
               if( firstComaPos == -1 ) continue;

               initialCrtValue = initialCrtValue.Insert( firstComaPos+1, string.Fromat("{0},{1},", itemId, parentId);
               pageWithIdAndParentId += ( "[" + initialCrtValue );

            }

hth,
A.
0
 

Author Comment

by:mousemat24
Comment Utility
Thanks Agarici for coming back to me: I've put the following code at the end

initialCrtValue = initialCrtValue.Insert(firstComaPos + 1, string.Format("{0},{1},", itemId, parentId));

string pageWithIdAndParentId = string.Empty;
pageWithIdAndParentId += pageWithIdAndParentId + ("[" + initialCrtValue);
lit1.Text = initialCrtValue;

the results what appear in lit1 is:

null,17,17,'dasdas','_self','sada']]

am I doing anything wrong?

Thanks for helping me out again
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
well... the '[' are removed when doing allEntries.Split('[');
so you will have to put them back by changing
initialCrtValue = crtValue;
to initialCrtValue = "[" + crtValue;

also take care of the case

if ( crtValue.Length == 0 )
        continue;

you should do there also a += "[" :

if ( crtValue.Length == 0 )
{
pageWithIdAndParentId += "[";
 continue;
 }

see if it works better after those changes

hth,
A.
0
 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici

Thanks for the response, really am grateful for your time. I've changed the code as per your comments, the following is the results from your code above:

[[[[null,2,2,'dasdas','_self','sada',[[null,3,2,'dasdas','_self','sada',[[null,4,3,'dasdas','_self','sada'],[[null,5,3,'dasdas','_self','sada',[[null,6,5,'dasdas','_self','sada'],[[null,7,5,'dasdas','_self','sada'],[[null,8,5,'dasdas','_self','sada']],[[null,9,3,'dasdas','_self','sada']]],[[null,10,10,'dasdas','_self','sada',[[null,11,10,'dasdas','_self','sada'],[[null,12,10,'dasdas','_self','sada'],[[null,13,10,'dasdas','_self','sada',[[null,14,13,'dasdas','_self','sada'],[[null,15,13,'dasdas','_self','sada'],[[null,16,13,'dasdas','_self','sada']]],[[null,17,17,'dasdas','_self','sada']];


But this is what I'm expecting, I think we have to many "[", "]", and also the numbering isnt right ID/parentID:

[[null,'1', '1','dasdas','_self','sada', [null,'2','1','dasdas','_self','sada', [null,'3','1','dasdas','_self','sada'], [null,'4','3','dasdas','_self','sada', [null,'5','4','dasdas','_self','sada'], [null,'6','4','dasdas','_self','sada'], [null,'7','4','dasdas','_self','sada'] ], [null,'8','1','dasdas','_self','sada'] ] ], [null,'9','9','dasdas','_self','sada', [null,'10','9','dasdas','_self','sada'], [null,'11','9','dasdas','_self','sada'], [null,'12','11','dasdas','_self','sada', [null,'13','12','dasdas','_self','sada'], [null,'14','12','dasdas','_self','sada'], [null,'15','12','dasdas','_self','sada'] ] ], ["Page",'16','16','dasdas','_self','sada']];

====================================================================
Do you think you can help me in getting this to work? the code I'm using is as follows Agarici
====================================================================

string page = "[[null,'dasdas','_self','sada',[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada']],[null,'dasdas','_self','sada']]],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada']]],[null,'dasdas','_self','sada']]";
            int itemId = 1;
            int parentId = 0;
            int crtPos = 0;
            string allEntries = page.Replace("\n", string.Empty);
            allEntries = allEntries.Replace("\r", string.Empty).Replace(" ", string.Empty).Replace("\t", string.Empty);

            string[] values = allEntries.Split('[');
            string crtValue = string.Empty;
            string query = string.Empty;            
            string initialCrtValue = string.Empty;
            string paveWithIdAndParentId = string.Empty;
            string pageWithIdAndParentId = "";
            ArrayList parents = new ArrayList();

            for ( int i = 0 ; i < values.Length ; i++ )
            {
                crtValue = values[i];

                if (crtValue.Length == 0)
                {
                    pageWithIdAndParentId += "[";
                    continue;
                }
                initialCrtValue = "[" + crtValue;
                itemId ++;
                parentId = itemId;
                crtPos = crtValue.IndexOf(']');
                if ( crtPos == -1 )
                {
                    if ( parents.Count > 0 )
                        parentId = (int)parents[parents.Count - 1];
                    parents.Add(itemId);
                }
                else
                {
                    crtValue = crtValue.Remove(crtPos, 1);
                    crtPos = crtValue.IndexOf(']');
                    if ( parents.Count > 0 )
                    {
                        parentId = (int)parents[parents.Count - 1];
                    }
                    while ( crtPos != -1 )
                    {
                        if ( parents.Count > 0 )
                        {
                            parents.RemoveAt(parents.Count - 1);
                        }
                        crtValue = crtValue.Remove(crtPos, 1);
                        crtPos = crtValue.IndexOf(']');
                    }
                }
               int firstComaPos = initialCrtValue.IndexOf( ',' );
               if( firstComaPos == -1 ) continue;
               initialCrtValue = initialCrtValue.Insert( firstComaPos+1, string.Format("{0},{1},", itemId, parentId));                
               pageWithIdAndParentId += ( "[" + initialCrtValue );
               lit1.Text = pageWithIdAndParentId;
            }


As I said, I'm am new to .NET and I really need some professional help in getting this sorted out. Thanks Agarici
0
 

Author Comment

by:mousemat24
Comment Utility
sorry to bother you Agarici, just wondering if you've come up with a solution?

Thanks man
0
Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici, did you have a look at problem?

Thank you
Mousemat24
0
 
LVL 11

Accepted Solution

by:
Agarici earned 500 total points
Comment Utility
           Console.WriteLine(page);
            int itemId = 1;
            int parentId = 0;
            int crtPos = 0;

            string allEntries = page.Replace("\n", string.Empty);
            allEntries = allEntries.Replace("\r", string.Empty).Replace(" ", string.Empty).Replace("\t", string.Empty);

            string[] values = allEntries.Split('[');
            string crtValue = string.Empty;
            string query = string.Empty;
            string initialCrtValue = string.Empty;
            string paveWithIdAndParentId = string.Empty;
            string pageWithIdAndParentId = "[";

            ArrayList parents = new ArrayList();

            for ( int i = 0 ; i < values.Length ; i++ )
            {
                crtValue = values[i];

                if ( crtValue.Length == 0 )
                {
                    continue;
                }
                initialCrtValue = "[" + crtValue;

                itemId ++;
                parentId = itemId;

                crtPos = crtValue.IndexOf(']');
                if ( crtPos == -1 )
                {
                    if ( parents.Count > 0 )
                        parentId = (int)parents[parents.Count - 1];
                    parents.Add(itemId);
                }
                else
                {
                    crtValue = crtValue.Remove(crtPos, 1);
                    crtPos = crtValue.IndexOf(']');
                    if ( parents.Count > 0 )
                    {
                        parentId = (int)parents[parents.Count - 1];
                    }
                    while ( crtPos != -1 )
                    {
                        if ( parents.Count > 0 )
                        {
                            parents.RemoveAt(parents.Count - 1);
                        }
                        crtValue = crtValue.Remove(crtPos, 1);
                        crtPos = crtValue.IndexOf(']');
                    }
                }

                //query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES (%s%d,%d)", values, id, parentId);
                query = string.Format("({0}{1},{2})", crtValue, itemId, parentId);
                Console.WriteLine(query);
                // execute query string formated above.
                int firstComaPos = initialCrtValue.IndexOf(',');
                if ( firstComaPos == -1 ) continue;
                initialCrtValue = initialCrtValue.Insert(firstComaPos + 1, string.Format("{0},{1},", itemId, parentId));
                pageWithIdAndParentId += (initialCrtValue);
0
 

Author Comment

by:mousemat24
Comment Utility
Agarici, thanks for replying to me!! :-)

Just copied your code, I thnk it may be wrong, sorry, but here is the output:

This example has [null,3,2  [null,4,2   [null,8,2   [null,'12','9'

[[null,1,1,'dasdas','_self','sada',[null,2,1,'dasdas','_self','sada',[null,3,2,'dasdas','_self','sada'],[null,4,2,'dasdas','_self','sada',[null,5,4,'dasdas','_self','sada'],[null,6,4,'dasdas','_self','sada'],[null,7,4,'dasdas','_self','sada']],[null,8,2,'dasdas','_self','sada']]],[null,9,9,'dasdas','_self','sada',[null,10,9,'dasdas','_self','sada'],[null,11,9,'dasdas','_self','sada'],[null,12,9,'dasdas','_self','sada',[null,13,12,'dasdas','_self','sada'],[null,14,12,'dasdas','_self','sada'],[null,15,12,'dasdas','_self','sada']]],[null,16,16,'dasdas','_self','sada']]

The output I'm expecting is:

This example has [null,3,1  [null,4,3   [null,8,1   [null,'12','11'

[ [null,'1', '1','dasdas','_self','sada', [null,'2','1','dasdas','_self','sada', [null,'3','1','dasdas','_self','sada'], [null,'4','3','dasdas','_self','sada', [null,'5','4','dasdas','_self','sada'], [null,'6','4','dasdas','_self','sada'], [null,'7','4','dasdas','_self','sada'] ], [null,'8','1','dasdas','_self','sada'] ] ], [null,'9','9','dasdas','_self','sada', [null,'10','9','dasdas','_self','sada'], [null,'11','9','dasdas','_self','sada'], [null,'12','11','dasdas','_self','sada', [null,'13','12','dasdas','_self','sada'], [null,'14','12','dasdas','_self','sada'], [null,'15','12','dasdas','_self','sada'] ] ], ["Page",'16','16','dasdas','_self','sada'] ];

Hope this makes sense Agarici?
Thanks for replying to my cry.
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
try mooving the line with 'itemId ++;' at the end of the for loop (before the closing bracket)
see if it works better
0
 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici

Tried that, but the numbers are still not matching up.
Thanks
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
using the code i have posted, i get this results.
please tell me exactly what is wrong

[
     [null,'M1','_self','sada',
          [null,'M1_1   ','_self','sada',
               [null,'M1_1_1  ','_self','sada'],
               [null,'M1_1_2  ','_self','sada',
                    [null,'M1_1_2_1','_self','sada'],
                    [null,'M1_1_2_2','_self','sada'],
                    [null,'M1_1_2_3','_self','sada']
               ],
               [null,'M1_1_3','_self','sada']
          ]
     ],
     [null,'M3','_self','sada',
          [null,'M3_1','_self','sada'],
          [null,'M3_2','_self','sada'],
          [null,'M3_3','_self','sada',
               [null,'M3_3_1','_self','sada'],
               [null,'M3_3_2','_self','sada'],
               [null,'M3_3_3','_self','sada']
          ]
     ],
     [null,'M4','_self','sada']
];

(null,'M1','_self','sada',1,1)
(null,'M1_1','_self','sada',2,1)
(null,'M1_1_1','_self','sada',3,2)
(null,'M1_1_2','_self','sada',4,2)
(null,'M1_1_2_1','_self','sada',5,4)
(null,'M1_1_2_2','_self','sada',6,4)
(null,'M1_1_2_3','_self','sada',7,4)
(null,'M1_1_3','_self','sada',8,2)
(null,'M3','_self','sada',9,9)
(null,'M3_1','_self','sada',10,9)
(null,'M3_2','_self','sada',11,9)
(null,'M3_3','_self','sada',12,9)
(null,'M3_3_1','_self','sada',13,12)
(null,'M3_3_2','_self','sada',14,12)
(null,'M3_3_3','_self','sada',15,12)
(null,'M4','_self','sada';16,16)

[[null,1,1,'M1','_self','sada',[null,2,1,'M1_1','_self','sada',[null,3,2,'M1_1_1
','_self','sada'],[null,4,2,'M1_1_2','_self','sada',[null,5,4,'M1_1_2_1','_self'
,'sada'],[null,6,4,'M1_1_2_2','_self','sada'],[null,7,4,'M1_1_2_3','_self','sada
']],[null,8,2,'M1_1_3','_self','sada']]],[null,9,9,'M3','_self','sada',[null,10,
9,'M3_1','_self','sada'],[null,11,9,'M3_2','_self','sada'],[null,12,9,'M3_3','_s
elf','sada',[null,13,12,'M3_3_1','_self','sada'],[null,14,12,'M3_3_2','_self','s
ada'],[null,15,12,'M3_3_3','_self','sada']]],[null,16,16,'M4','_self','sada']];
0
 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici
I'm using this string for the page variable:

string page = "[[null,'dasdas','_self','sada',[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada']],[null,'dasdas','_self','sada']]],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada',[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada'],[null,'dasdas','_self','sada']]],[null,'dasdas','_self','sada']]";

I've changed int itemId = 1; to int itemId = 0; as I want it to start from 1. I'm using a WEB form, so I'm outputing the value to a Literal control. The results are as follows:

[[null,1,1,'dasdas','_self','sada',[null,2,1,'dasdas','_self','sada',[null,3,2,'dasdas','_self','sada'],[null,4,2,'dasdas','_self','sada',[null,5,4,'dasdas','_self','sada'],[null,6,4,'dasdas','_self','sada'],[null,7,4,'dasdas','_self','sada']],[null,8,2,'dasdas','_self','sada']]],[null,9,9,'dasdas','_self','sada',[null,10,9,'dasdas','_self','sada'],[null,11,9,'dasdas','_self','sada'],[null,12,9,'dasdas','_self','sada',[null,13,12,'dasdas','_self','sada'],[null,14,12,'dasdas','_self','sada'],[null,15,12,'dasdas','_self','sada']]],[null,16,16,'dasdas','_self','sada']]

--------------------------------------------------------------------------------------------------------------------------
The output I'm expecting is as follows, noticed there are some slight number changes:

[ [null,'1', '1','dasdas','_self','sada', [null,'2','1','dasdas','_self','sada', [null,'3','1','dasdas','_self','sada'], [null,'4','3','dasdas','_self','sada', [null,'5','4','dasdas','_self','sada'], [null,'6','4','dasdas','_self','sada'], [null,'7','4','dasdas','_self','sada'] ], [null,'8','1','dasdas','_self','sada'] ] ], [null,'9','9','dasdas','_self','sada', [null,'10','9','dasdas','_self','sada'], [null,'11','9','dasdas','_self','sada'], [null,'12','11','dasdas','_self','sada', [null,'13','12','dasdas','_self','sada'], [null,'14','12','dasdas','_self','sada'], [null,'15','12','dasdas','_self','sada'] ] ], ["Page",'16','16','dasdas','_self','sada'] ];


I hope I've explained myself? If not, please let me know.
Thank you
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
i think you are making a mistake as to the desired output
please examine what you have originaly posted and notice the output differs as tree structure from the imput.
i think (correct me if i'm wrong ) you made a mistake when establishing what the output should look like.


[
     [null,'dasdas','_self','sada',
          [null,'dasdas','_self','sada',
               [null,'dasdas','_self','sada'],
               [null,'dasdas','_self','sada',
                    [null,'dasdas','_self','sada'],
                    [null,'dasdas','_self','sada'],
                    [null,'dasdas','_self','sada']
               ],
               [null,'dasdas','_self','sada']
          ]
     ],
     [null,'dasdas','_self','sada',
          [null,'dasdas','_self','sada'],
          [null,'dasdas','_self','sada'],
          [null,'dasdas','_self','sada',
               [null,'dasdas','_self','sada'],
               [null,'dasdas','_self','sada'],
               [null,'dasdas','_self','sada']
          ]
     ],
     [null,'dasdas','_self','sada']
];

// this should be the output
[
     [null,'1', '1','dasdas','_self','sada',
          [null,'2','1','dasdas','_self','sada',
               [null,'3','2','dasdas','_self','sada'],
               [null,'4','2','dasdas','_self','sada',
                     [null,'5','4','dasdas','_self','sada'],
                     [null,'6','4','dasdas','_self','sada'],
                     [null,'7','4','dasdas','_self','sada']
          ],
          [null,'8','1','dasdas','_self','sada']
          ]
     ],
     [null,'9','9','dasdas','_self','sada',
          [null,'10','9','dasdas','_self','sada'],
          [null,'11','9','dasdas','_self','sada'],
               [null,'12','11','dasdas','_self','sada',
                    [null,'13','12','dasdas','_self','sada'],
                    [null,'14','12','dasdas','_self','sada'],
                    [null,'15','12','dasdas','_self','sada']
          ]
     ],
     ["Page",'16','16','dasdas','_self','sada']
];
 
as opposed to what you posted:
[
     [null,'1', '1','dasdas','_self','sada',
          [null,'2','1','dasdas','_self','sada',
          [null,'3','1','dasdas','_self','sada'],
               [null,'4','3','dasdas','_self','sada',
                    [null,'5','4','dasdas','_self','sada'],
                    [null,'6','4','dasdas','_self','sada'],
                    [null,'7','4','dasdas','_self','sada']
          ],
          [null,'8','1','dasdas','_self','sada']
          ]
     ],
     [null,'9','9','dasdas','_self','sada',
          [null,'10','9','dasdas','_self','sada'],
          [null,'11','9','dasdas','_self','sada'],
               [null,'12','11','dasdas','_self','sada',
                    [null,'13','12','dasdas','_self','sada'],
                    [null,'14','12','dasdas','_self','sada'],
                    [null,'15','12','dasdas','_self','sada']
          ]
     ],
     ["Page",'16','16','dasdas','_self','sada']
];
0
 

Author Comment

by:mousemat24
Comment Utility
Agarici

I think your cracked it, you were right, it was my output that was messed up!!! Ohh man, you cant beleive how happy I am do get someone help me with this problem!!!

Agarici, do you think you can place some comments? I really would like to know how you built this program.

One final question, do you think you can help me out with a slight change to this function? I can place another question. Basiclly, all the top level nodes i.e. '1', '1' ... '9','9' and '16','16' etc, can they change to

'1','top' ... '9','top' and '16','top' etc

I've noticed in http://aspalliance.com/732, he places a null (top) at the top level nodes. I've just placed top, just to make it different. As I said I can post another question. Really would appriciate your help in this.

Thanks Agarici for all your help!!! sorry if I pestered you, but I really needed this ASAP.
Thank you Thank you Thank you Thank you
Mousemat24
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
replace
              query = string.Format("({0}{1},{2})", crtValue, itemId, parentId);
with
              query = string.Format("({0}{1},{2})", crtValue, itemId, parentId == itemId ? "top or whatever" : parentId.ToString() );
0
 

Author Comment

by:mousemat24
Comment Utility
Agarici

Thanks for helping out, I hope you didnt find me a pest or anything!! hope you liked this problem?

Mousemat24
0
 

Author Comment

by:mousemat24
Comment Utility
Hi Agarici

Do you think you can help me with getting another problem I have, its pretty much the same as the stuff you've done, but I want to capture all the value and place it in the query string (insert)

So if I had the following

['home.gif', 'Homepage', 'http://www.google.com', 'main','this is a test', '1', '2'

will get converted to:

query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES (%a,%b,%c,%d,%e,%f,%g)", icon, title, url, target, desc, itemid, parentid);


Dont know if that made sense? I can place this as a seperate question? Really would like you to help me out.
Thanks Agarici
0
 
LVL 11

Expert Comment

by:Agarici
Comment Utility
i think you should have opened an other question for that

anyway:
string someString = @"['home.gif', 'Homepage', 'http://www.google.com', 'main','this is a test', '1', '2'";
string[] values = someString.Split(',');
if( values.Length != 7 )
    // see how to handle this case

query = string.Format("INSERT INTO yourTableHere (menu_Icon,menu_Title,menu_URL,menu_Target ,menu_description, Id, ParentId) VALUES ({0},{1},{2},{3},{4},{5},{6})", values[0],values[1],values[2],values[3],values[4],values[5],values[6]);

A.
0
 

Author Comment

by:mousemat24
Comment Utility
ok, I've just created another question Agarici, title Manipulate arrays, and placing the resualts to SQL

Thanks
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
C# primary key 9 53
.NET Error 7 40
Trouble with References... 5 21
Image(7) 1 33
Article by: Ivo
Anonymous Types in C# by Ivo Stoykov Anonymous Types are useful when  we do not need to follow usual work-flow -- creating object of some type, assign some read-only values and then doing something with them. Instead we can encapsulate this read…
This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
This video discusses moving either the default database or any database to a new volume.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now