Multidimensional array of strings with vector.


 
Thread Tools Search this Thread
Top Forums Programming Multidimensional array of strings with vector.
# 1  
Old 12-29-2010
Multidimensional array of strings with vector.

I've been struggling with this for quite some time. I decided I should get some help with this. Nothing is working. I'm getting a segmentation fault or out of bounds error when I try to load the entries in the for loop.I'm really frustrated. Smilie Compiling isn't the problem. It's crapping out on me at runtime.

Code:
  vector< vector<string> > tl;
  vector< vector<string> > tld;
  
  for(int i=0;i<todayslive.size();i++) {
    mysqlpp::String transfer;
    string transfer2;
      
    transfer = todayslive.at(i)["tf_database_key"];
    transfer2 = string(transfer.data(),transfer.length());
    tl.at(i).push_back(transfer2);
    transfer = todayslive.at(i)["tf_air_time"];
    transfer2 = string(transfer.data(),transfer.length());
    tl.at(i).push_back(transfer2);
    transfer = todayslive.at(i)["tf_duration"];
    transfer2 = string(transfer.data(),transfer.length());
    tl.at(i).push_back(transfer2);

    transfer = todayslivedet.at(i)["tf_database_key"];
    transfer2 = string(transfer.data(),transfer.length());
    tld[i][0]=transfer2;
    transfer = todayslivedet.at(i)["tf_title"];
    transfer2 = string(transfer.data(),transfer.length());
    tld[i][1]=transfer2;
    transfer = todayslivedet.at(i)["tf_genre_desc138"];
    transfer2 = string(transfer.data(),transfer.length());
    tld[i][2]=transfer2;
    transfer = todayslivedet.at(i)["tf_epi_title"];
    transfer2 = string(transfer.data(),transfer.length());
    tld[i][3]=transfer2;
  }
  //End Load tl & tld.

  vector<string> genres;
  cout << tl.size() << endl;
  cout << tl[0][2] << endl;

# 2  
Old 12-29-2010
we need to see more of the code. what is "todayslive"?
# 3  
Old 12-29-2010
Thanks for your reply. Your welcome to all of it. Since I posted I tried changing to string tl[10000][3] which seems to work nicer but still ends in a fatality at run time.

Code:
#include </usr/include/mysql++/mysql++.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include <ostream>
#include <string>
#include <vector>

using namespace std;
using namespace mysqlpp;

int main()
{
  //<----------------------------------------------------->
  mysqlpp::Connection conn;
  if (conn.connect("dsgsports","127.0.0.1" , "root", "")) {
          printf("Creating guides...\n");  
  }
  else {
    printf("Database connection failure.");
    return 1;
  }
  //<----------------------------------------------------->

  string todaysdate;  
  stringstream transfer;
  time_t rawtime;
  struct tm* timeinfo;
  time(&rawtime);
  timeinfo = localtime(&rawtime);
  //Format todaysdate.
  transfer << timeinfo->tm_year + 1900;
  transfer << timeinfo->tm_mon+1;
  transfer << timeinfo->tm_mday;
  todaysdate = transfer.str();
  cout << "Todays date:" << todaysdate << endl;

  vector<Row> todayslive;
  Query querya = conn.query();
  querya << "select * from sports_schedule where tf_air_date='" << todaysdate + "' " << "and tf_live_tape_delay='Live' order by tf_database_key";
  querya.storein(todayslive);
  cout << "'todayslive.size()'=" <<  todayslive.size() << endl;

  vector<Row> todayslivedet;
  for(int i=0;i<todayslive.size();i++) {
    mysqlpp::String transfer = todayslive.at(i)["tf_database_key"];
    string tf_database_key = string(transfer.data(),transfer.length());
    //cout << i << " " << tf_database_key  << endl;
    Query queryb = conn.query();
    queryb << "select * from sports_program where tf_database_key='" << tf_database_key + "'";
    queryb.storein(todayslivedet);
    //StoreQueryResult res = queryb.store();
    //todayslivedet.push_back(res);  
  }
 
  cout << "'todayslivedet.size()='" << todayslivedet.size() << endl;
  
  for(int i=0;i<todayslive.size();i++) {
    cout << todayslive.at(i)["tf_database_key"] << " " <<  todayslivedet.at(i)["tf_database_key"] << endl;
  }

  
  //Load tl & tld.i
  string tl[todayslive.size()][2];
  string tld[todayslivedet.size()][3];
  
  for(int i=0;i<todayslive.size();i++) {
    mysqlpp::String transfer;
    string transfer2;
      
    transfer = todayslive.at(i)["tf_database_key"];
    transfer2 = string(transfer.data(),transfer.length());
    tl[i][0]="mystring";
    transfer = todayslive.at(i)["tf_air_time"];
    transfer2 = string(transfer.data(),transfer.length());
    tl[i][1]="mystring";
    transfer = todayslive.at(i)["tf_duration"];
    transfer2 = string(transfer.data(),transfer.length());
    tl[i][2]="mystring";

    //transfer = todayslivedet.at(i)["tf_database_key"];
    //transfer2 = string(transfer.data(),transfer.length());
    //tld[i][0]=transfer2;
    //transfer = todayslivedet.at(i)["tf_title"];
    //transfer2 = string(transfer.data(),transfer.length());
    //tld[i][1]=transfer2;
    //transfer = todayslivedet.at(i)["tf_genre_desc138"];
    //transfer2 = string(transfer.data(),transfer.length());
    //tld[i][2]=transfer2;
    //transfer = todayslivedet.at(i)["tf_epi_title"];
    //transfer2 = string(transfer.data(),transfer.length());
    //tld[i][3]=transfer2;
  }
  //End Load tl & tld.

  //vector<string> genres;
  //cout << tld[0][2] << endl;
  //cout << tld[1][2] << endl;
  //cout << tld[2][2] << endl;
  
  //File IO is done here.  
  std::ofstream outfile("guide.txt", std::ios::out);
  if(outfile.is_open())
  {
    //for(int i=0;i<todayslive.size();i++) {
      //for(int x=0;x<tl.size();x++){ outfile << tl.at(x) + " "; }
      //outfile << endl;
      //for(int x=0;x<tld.size();x++) { outfile << tld.at(x) + " "; }
      //outfile << endl;    
    //}
    //outfile.close();
  }
  else
    std::cout << "Could not open file." << endl;
  //End of File IO.





  cout << "Guides created successfully." << endl;    
  return 0;
}

# 4  
Old 12-29-2010
compile with debugging symbols, and analyze the core. If you're on Linux, you may try to run your program under valgrind's supervision.

Cheers, Loïc
# 5  
Old 12-29-2010
"when things crash, make the array bigger" is not the answer.

I'm still trying to boil down just what you're trying to do, but my guess so far? There's no error checking for most of what you do. If you ever get data (or lack of data) you don't expect, it uses it anyway. Check everything.

Also, since you're using localtime() anyway, you might as well save yourself a mountain of work and use strftime too:

Code:
#include <time.h>
#include <string>
#include <iostream>
using namespace std;

int main(void)
{
        time_t t=time(NULL);
        char todaysdate[32];
        strftime(todaysdate, 32, "%Y%m%d", localtime(&t));

        cout << "today's date is " << todaysdate << endl;
}

---------- Post updated at 03:04 PM ---------- Previous update was at 02:08 PM ----------

mysql's row type seems very twitchy.

Code:
 Query querya=conn.query();
  querya << query;
  querya.storein(results);

  printf("%d rows\n", results.size());

  for(int n=0; n<results.size(); n++)
  {
    printf("row has %d fields\n", results[n].size());
  }

Code:
2 rows
row has 2520205 fields
row has 2520205 fields

Needless to say, you're not the only one mystified. Are you sure you want to use the C++ interface and not the C one?

Last edited by Corona688; 12-29-2010 at 04:19 PM..
# 6  
Old 12-29-2010
Multidimensional Array

Code:
vector<vector<string>> big;
vector<strings> small;

small.push_back("Cell One");
small.push_back("Cell Two");
small.push_back("Cell Three");

big.push_back(small);

cout << big[0][0] << endl;

Try it! It works for me! For some reason all the other examples I tried have failed me (Fedora14,g++,gdb) SmilieSmilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sort multidimensional Array

Hello I have a problem. I create a Multidimensional Array Like this: ENTRY="$kunnum-$host" ENTRY="$host" ENTRY="# $3" for key in "${!ENTRY}"; do ENTRIES=${ENTRY} # INDEX=IP(5) donedeclare -p declare -A ENTRIES=(="unas15533" ="unas" ="# RDP-Terminal 2"... (12 Replies)
Discussion started by: Marti95
12 Replies

2. Shell Programming and Scripting

Multidimensional array

I am learning about bash system variables, such as $ , @ and #. I have this piece of script implementing an array and it is doing its job just fine. This is not the only array I will be using. Just for ease of maintenance and more coding I would like to have the arrays in two dimensional... (4 Replies)
Discussion started by: annacreek
4 Replies

3. Shell Programming and Scripting

How to deal with multidimensional array in awk?

Hi all! I would like to know how to print $0 when using multidimensional array like below time being I am using for loop to print columns like this awk 'FNR==1{i++} {for(k=1;k<=NF;k++)A=$k} END{for(j=1;j<=25;j++) print A,A,A,A,A,A,A,A,A,A,A,A,A,A}' file1 file2 so here my problem is I... (5 Replies)
Discussion started by: Akshay Hegde
5 Replies

4. Shell Programming and Scripting

gawk - How to loop through multidimensional array?

I have an awk script that I am writing and I needed to make use of a multidimensional array to hold some data... Which is all fine but I need to loop through that array now and I have no idea how to do that. for a regular array, the following works: ARRAY for(var in ARRAY) { ... } ... (5 Replies)
Discussion started by: trey85stang
5 Replies

5. Programming

Sorting a multidimensional vector by a specific field.

In some cases I would like to sort by index, in some cases by color and in some cases by Callsign. Can this be done? :D vector< vector<string> > table; vector<string> row; row.push_back("1");row.push_back("green");row.push_back("alpha"); table.push_back(row);... (0 Replies)
Discussion started by: sepoto
0 Replies

6. Shell Programming and Scripting

multidimensional array in awk

Hi, I was trying to process a file with the help of awk. I want to first display all the rows that contains 01 and at the end of processing I have to print some portion of all the lines. like below. Output expected: (2 Replies)
Discussion started by: ahmedwaseem2000
2 Replies

7. Programming

multidimensional array using c++ vector

Hi! I need to make dynamic multidimensional arrays using the vector class. I found in this page How to dynamically create a two dimensional array? - Microsoft: Visual C++ FAQ - Tek-Tips the way to do it in 2D, and now i'm trying to expand it to 3D but i don't understand how is the operator working,... (0 Replies)
Discussion started by: carl.alv
0 Replies

8. Shell Programming and Scripting

AWK multidimensional array

In a single dim. awk array, we can use : <index> in <array name> to determine whether a particualar index exists in the array or not. Is there a way to achieve this in a awk multi dim. array ? (4 Replies)
Discussion started by: sinpeak
4 Replies

9. Shell Programming and Scripting

Awk multidimensional Array

Hello Experts,, Can anybody give me a brief idea what is following bold letter statement is for!! what is the term called so that I can google for it.. It seems to be an array inside another array.. awk' /TXADDR/ { txaddr=$NF } ##understood /TXDATA/ { txdata]=$NF... (1 Reply)
Discussion started by: user_prady
1 Replies

10. Shell Programming and Scripting

multidimensional array in perl

i'm trying to open a file with three or more columns and an undetermined, but finite number of rows. I want to define an array for each row with each element of the row as a sub array. The columns are separated by tabs or spaces. Here's the file: 12x3.12z34b.342sd3.sds 454.23.23.232 ... (9 Replies)
Discussion started by: prkfriryce
9 Replies
Login or Register to Ask a Question