storing data, best possible way?

  • (2 Pages)
  • +
  • 1
  • 2

15 Replies - 596 Views - Last Post: 23 March 2013 - 08:36 AM Rate Topic: -----

#1 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

storing data, best possible way?

Posted 21 March 2013 - 01:33 PM

Hello there!!

I decided to take a project on that my brother offered me to do because I told him that I wasn't really sure if would like programming. In short I took on this challenge from my brother and now I am in need of assistance.

The program needs to be able to open and read a large .csv file (which contains different sets of data types) and store it in a organize matter. The problem is that i believe that arrays can only have a single data type. In this case their are only two different types string and floats that are in the csv file.

My question is what would be the best way to store this information(array?)?


So far I have been able to open the file and read it but, im not entirely sure if arrays would be the way to store the information.

Let me ensure you all that I am not trying to find code to use. I am looking for direction/guidance.

Thanks guys!

This post has been edited by ayabrego: 21 March 2013 - 01:36 PM


Is This A Good Question/Topic? 0
  • +

Replies To: storing data, best possible way?

#2 jimblumberg  Icon User is online

  • member icon


Reputation: 4155
  • View blog
  • Posts: 12,944
  • Joined: 25-December 09

Re: storing data, best possible way?

Posted 21 March 2013 - 01:36 PM

Quote

My question is what would be the best way to store this information(array?)?

Think about a structure to hold each line of data, a vector or array of this structure to hold the information from the file.

Jim
Was This Post Helpful? 0
  • +
  • -

#3 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

Re: storing data, best possible way?

Posted 21 March 2013 - 01:44 PM

Are you saying that through structures I can have different data types for my array?
Was This Post Helpful? 0
  • +
  • -

#4 jimblumberg  Icon User is online

  • member icon


Reputation: 4155
  • View blog
  • Posts: 12,944
  • Joined: 25-December 09

Re: storing data, best possible way?

Posted 21 March 2013 - 01:50 PM

Not through structures but in structures. Structures are designed to hold multiple data types.
struct test
{
   int number;
   std::string name;
   double bigNumber;
};



By the way you haven't mentioned whether you are using C or C++.


Jim
Was This Post Helpful? 0
  • +
  • -

#5 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

Re: storing data, best possible way?

Posted 21 March 2013 - 02:06 PM

View Postjimblumberg, on 21 March 2013 - 01:50 PM, said:

Not through structures but in structures. Structures are designed to hold multiple data types.
struct test
{
   int number;
   std::string name;
   double bigNumber;
};



By the way you haven't mentioned whether you are using C or C++.


Jim


Silly me! I am using c++. im gonna have to give that try! Ill let you all know how it goes
Was This Post Helpful? 0
  • +
  • -

#6 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

Re: storing data, best possible way?

Posted 21 March 2013 - 02:54 PM

Posted Image

I took a picture of the data so maybe you all can help even further than me just explaining. Also i believe it will help with you all assisting me. So basically i need to be able to organize and store this information into memory so later on I can do something. With this picture now, do you all still think it can be done in structures? Sorry for the noob questions just trying to wrap my head around this problem
Was This Post Helpful? 0
  • +
  • -

#7 jimblumberg  Icon User is online

  • member icon


Reputation: 4155
  • View blog
  • Posts: 12,944
  • Joined: 25-December 09

Re: storing data, best possible way?

Posted 21 March 2013 - 03:36 PM

Post a small sample of your data file, about 10 complete lines should be sufficient.

Yes structures are the way to go.

Jim
Was This Post Helpful? 0
  • +
  • -

#8 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

Re: storing data, best possible way?

Posted 21 March 2013 - 05:19 PM

here we go! As you can see it is quite large. Hope this helps you all be able to help me :)/> Just got home so I am gonna try and look into struct.

edit: apparently I am not allowed to upload this type of file.

This post has been edited by ayabrego: 21 March 2013 - 05:22 PM

Was This Post Helpful? 0
  • +
  • -

#9 #define  Icon User is offline

  • Duke of Err
  • member icon

Reputation: 1371
  • View blog
  • Posts: 4,752
  • Joined: 19-February 09

Re: storing data, best possible way?

Posted 21 March 2013 - 05:54 PM

Copy and paste a few lines including the titles of the columns. Paste it into code tags, under Other styles SQL code is good. I'd create the code tags before posting.
Was This Post Helpful? 0
  • +
  • -

#10 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

Re: storing data, best possible way?

Posted 21 March 2013 - 06:01 PM

Start of Real Time LMP Data							100	100	100	200	200	200	300	300	300	400	400	400	500	500	500	600	600	600	700	700	700	800	800	800	900	900	900	1000	1000	1000	1100	1100	1100	1200	1200	1200	1300	1300	1300	1400	1400	1400	1500	1500	1500	1600	1600	1600	1700	1700	1700	1800	1800	1800	1900	1900	1900	2000	2000	2000	2100	2100	2100	2200	2200	2200	2300	2300	2300	2400	2400	2400
Date	PnodeID	Name	Voltage	Equipment	Type	Zone	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice	TotalLMP	CongestionPrice	MarginalLossPrice
20130319	1	PJM-RTO			ZONE		48.962335	0.040994	0.031342	33.440858	0.006933	0.023925	35.783237	0.031183	0.022054	35.778843	0.013591	0.025251	38.858669	0.021054	0.027615	42.161166	0.043139	0.028028	60.982988	0.002736	0.030252	74.888365	0.037296	0.041069	60.617955	0.002852	0.035103	77.65279	0.001595	0.051194	39.867818	0.002915	0.024903	67.698744	0.003681	0.035063	39.561811	-0.010448	0.022259	36.23281	0.001542	0.021268	39.199804	0.000164	0.01964	36.519811	0.000764	0.019047	33.052895	0.000713	0.022182	32.429311	0.003016	0.016295	29.421979	0.001525	0.010454	167.336237	-0.000213	0.07645	45.375992	-0.002459	0.018451	43.031436	0.000102	0.021334	41.506988	0.000181	0.026807	35.21238	0.002206	0.020174
20130319	3	MID-ATL/APS			ZONE		57.636465	7.186735	1.55973	34.777976	0.43196	0.936016	37.328814	0.492613	1.106201	37.732506	0.988339	1.004166	41.214712	1.332401	1.07231	45.271572	2.146415	1.035157	62.490548	-0.037861	1.578409	70.165429	-6.445811	1.80124	63.066262	0.960249	1.526013	81.158124	1.489931	2.068193	42.265077	1.468226	0.956851	71.035868	1.780878	1.594989	40.688208	0.26139	0.876818	37.020521	0.038594	0.771927	39.765039	0.008893	0.576146	38.048643	0.966944	0.581699	34.499909	0.875242	0.594668	33.60262	0.585665	0.606954	30.250415	0.344169	0.496246	172.610952	1.93982	3.411132	45.995825	0.088245	0.54758	43.520251	0.027553	0.482698	42.03216	0.161108	0.391052	36.452531	0.780482	0.482049
20130319	51291	AECO			ZONE		58.108491	7.221769	1.996722	34.97756	0.449448	1.118112	37.59052	0.510539	1.34998	38.455295	1.472416	1.242879	42.153197	2.0065	1.336697	46.866178	3.476748	1.299429	63.10428	0.06056	2.09372	55.877101	-21.216161	2.283262	63.910092	1.623582	1.706509	82.590278	2.486205	2.504073	43.485879	2.414098	1.231781	72.894565	2.890163	2.344402	38.83471	-1.923081	1.20779	37.009337	-0.143467	0.942805	39.841881	0.02	0.641881	37.923933	0.747969	0.675964	34.610641	0.834551	0.74609	34.135011	0.892647	0.832364	30.787117	0.557418	0.819699	176.485985	3.097691	6.128293	46.607195	0.174163	1.073032	43.920495	0.050385	0.86011	42.282303	0.185686	0.616617	36.759182	0.855192	0.71399
20130319	8445784	AEP			ZONE		40.035459	-7.56614	-1.2884	32.194859	-0.439604	-0.775537	35.494802	0.690581	-0.925779	34.82398	-0.075301	-0.840719	37.79198	-0.116893	-0.901127	40.289743	-0.914934	-0.885323	59.509655	0.052118	-1.492462	75.977497	2.975888	-1.808391	58.341796	-0.74038	-1.497824	74.493727	-1.160631	-1.945642	37.800422	-1.139187	-0.90039	65.050788	-1.165679	-1.443533	39.001089	0.202352	-0.751263	35.904412	0.367775	-0.673362	38.920256	0.253135	-0.512879	35.597871	-0.384281	-0.517848	31.948025	-0.589847	-0.492128	31.535073	-0.365779	-0.509148	28.785035	-0.209963	-0.415001	162.754006	-1.50807	-2.997924	44.790926	-0.070762	-0.498311	42.576988	-0.021423	-0.411589	41.063986	-0.117552	-0.298462	34.348379	-0.515106	-0.326515
20130319	8394954	APS			ZONE		53.602385	4.43779	0.274596	33.918028	0.285847	0.222182	36.564673	0.562698	0.271975	36.043787	0.118682	0.185105	39.093836	0.141195	0.142641	41.730292	-0.43605	0.076342	61.009847	0.049236	0.010611	77.349242	2.728298	-0.189055	59.951417	-0.38964	-0.238942	76.670869	-0.631363	-0.297767	39.079473	-0.629408	-0.131119	66.616124	-0.742897	-0.300979	38.950189	-0.352072	-0.247739	35.943972	-0.017341	-0.248687	38.886326	0.011576	-0.305251	35.706175	-0.519646	-0.274178	32.415299	-0.416908	-0.197794	31.982643	-0.198426	-0.228931	29.061985	-0.108514	-0.239501	165.255494	-0.894145	-1.110361	44.863218	-0.037045	-0.459737	42.537476	-0.010476	-0.462048	41.034476	-0.08158	-0.363944	34.533741	-0.3623	-0.293959
20130319	116013753	ATSI			ZONE		42.678893	-6.919419	0.708312	33.540882	-0.398987	0.529869	36.858244	0.608916	0.519328	36.014838	-0.220653	0.495492	39.026731	-0.332608	0.549339	41.206729	-1.492168	0.608897	61.911143	0.047248	0.913895	75.926491	-0.115248	1.231739	60.431703	-0.948231	0.799934	77.321765	-1.486493	1.208258	39.346951	-1.448675	0.955625	67.858996	-1.630353	1.829349	40.954132	0.218591	1.185542	37.528903	0.163275	1.155628	40.494465	0.107793	1.206671	36.935181	-0.649471	1.084652	33.326081	-0.682054	0.978134	32.782678	-0.476581	0.849259	30.00458	-0.280233	0.874813	170.422365	-1.865374	5.027738	46.687693	-0.09376	1.421453	44.253115	-0.027369	1.270484	42.423393	-0.13726	1.080653	35.337047	-0.611937	0.758984
20130319	51292	BGE			ZONE		64.025237	12.463616	2.671621	35.868931	0.765678	1.693253	38.207216	0.498127	1.979089	38.385591	0.687995	1.957596	41.898551	0.923058	2.165493	45.54018	1.208644	2.241536	64.592652	0.052571	3.590081	114.418169	34.956657	4.651512	64.649842	0.469879	3.599963	82.851772	0.704983	4.546788	42.514437	0.682469	1.991969	71.54169	0.80611	3.07558	39.977406	-1.205628	1.633035	37.702725	-0.129402	1.622127	40.878935	-0.018716	1.717651	38.120044	-0.049696	1.669741	34.769343	0.091653	1.64769	34.308838	0.2667	1.632137	30.664843	0.177581	1.077263	174.369068	0.754139	6.354929	47.112931	0.05052	1.702411	44.553055	0.011368	1.531687	43.008185	0.021936	1.506249	36.649683	0.09978	1.359903
20130319	33092371	COMED			ZONE		26.859989	-18.44507	-3.584941	30.015824	-1.149587	-2.244589	28.944008	-4.146669	-2.639324	30.206873	-3.040964	-2.492164	31.873014	-4.181729	-2.755257	34.412406	-4.755687	-2.921907	56.614605	-0.07509	-4.260305	72.566178	2.627993	-4.871815	56.202191	-0.881941	-3.495867	71.569329	-1.371085	-4.659585	36.138001	-1.345702	-2.356297	61.814344	-1.77872	-4.066936	37.040353	-0.291298	-2.218349	33.890231	-0.315935	-2.003834	37.155714	-0.208075	-1.816211	33.782982	-0.950443	-1.766574	30.32398	-0.852566	-1.853453	29.853534	-0.740087	-1.81638	27.430668	-0.476984	-1.502348	156.427199	-1.80666	-9.026141	43.32503	-0.089302	-1.945668	41.278317	-0.023488	-1.708195	39.757042	-0.13	-1.592958	32.809779	-0.79809	-1.582131
20130319	34508503	DAY			ZONE		32.204083	-16.034858	-0.65106	32.121579	-0.920893	-0.367528	36.918015	1.709671	-0.521657	35.244301	-0.123531	-0.372168	38.481685	-0.015731	-0.312584	42.088015	0.023926	-0.025911	61.330228	0.092639	0.287589	78.171492	2.530592	0.8309	59.88841	-0.804655	0.113065	76.216966	-1.256186	-0.126848	38.851077	-1.23175	0.242826	66.881149	-1.607604	0.828754	39.717683	-0.387179	0.554862	36.406563	-0.309506	0.506069	39.688755	-0.206897	0.715652	36.051109	-1.002902	0.554011	32.863507	-0.591247	0.424754	32.450106	-0.337231	0.377337	29.645615	-0.197059	0.432675	167.879432	-1.635259	2.254691	46.579015	-0.079915	1.29893	44.187342	-0.02	1.197342	42.341697	-0.129046	0.990742	35.26815	-0.484461	0.562612
20130319	124076095	DEOK			ZONE		28.698228	-17.179176	-3.012596	30.47942	-0.971771	-1.958809	36.138704	2.5941	-2.185396	33.646373	-0.123681	-1.969946	36.872584	0.129173	-2.066589	41.085025	1.03419	-2.039164	58.110562	0.128829	-2.968266	74.288412	2.782113	-3.303701	56.887348	-0.902307	-2.790345	72.477097	-1.330687	-3.792216	36.766497	-1.219252	-1.854251	62.701126	-1.840239	-3.118635	36.882148	-0.87499	-1.792862	33.785532	-0.775113	-1.649355	37.074172	-0.519823	-1.586005	33.601217	-1.377068	-1.521715	31.055678	-0.558238	-1.416084	30.720659	-0.272443	-1.416899	28.055622	-0.159694	-1.194684	158.485053	-1.601588	-7.173358	43.889801	-0.079792	-1.390406	41.722998	-0.02	-1.267002	40.129156	-0.122064	-1.228779	33.566502	-0.419398	-1.2041
20130319	34964545	DOM			ZONE		69.595801	19.446317	1.259484	35.459923	1.185327	0.864596	37.161571	0.439229	0.992341	37.028292	0.293326	0.994966	40.292163	0.374916	1.107247	43.322787	0.076887	1.1559	62.383624	0.049389	1.384235	89.878274	13.345783	1.722491	61.783083	-0.066036	1.26912	78.984246	-0.118267	1.502513	40.329098	-0.121696	0.610794	68.350597	-0.195295	0.885892	39.081079	-0.816677	0.347755	36.412746	-0.170537	0.373283	39.670508	-0.072886	0.563394	36.688605	-0.418479	0.607084	33.496951	-0.222889	0.68984	33.046778	-0.023145	0.659923	29.711205	-0.003436	0.304641	167.872471	-0.248977	0.861448	45.656926	-0.003869	0.300795	43.348842	-0.001801	0.340644	42.110109	-0.039272	0.669381	35.682655	-0.187238	0.679892
20130319	51293	DPL			ZONE		58.801672	7.654509	2.257163	35.188067	0.480418	1.297649	37.706953	0.519768	1.457184	38.344335	1.298152	1.306183	42.010725	1.758623	1.442102	46.48954	2.960966	1.438574	63.446317	0.06	2.436317	55.074547	-22.634023	2.89857	64.145834	1.359571	2.206262	82.551618	2.08324	2.868378	43.133487	2.017736	1.275751	72.098979	2.417961	2.021018	38.695846	-1.78455	0.930396	36.857871	-0.1304	0.778271	39.861337	0.019497	0.66184	37.73612	0.541868	0.694252	34.370121	0.646783	0.693338	33.891664	0.747069	0.734595	30.482659	0.468721	0.603937	174.554138	2.538928	4.75521	46.343054	0.149024	0.83403	43.715574	0.039671	0.665903	42.207362	0.141892	0.58547	36.559841	0.64854	0.7213
20130319	37737283	DUQ			ZONE		44.557258	-2.927211	-1.405531	32.283328	-0.157738	-0.968933	35.261522	0.605354	-1.073833	34.596434	-0.015867	-1.127699	37.490535	-0.044569	-1.274896	39.798289	-0.840847	-1.450864	58.848903	0.05	-2.151097	71.730091	-0.39347	-2.68644	57.764453	-0.614694	-2.200853	74.006828	-0.967357	-2.625815	37.725473	-0.943869	-1.170658	64.648641	-1.081296	-1.930063	38.265439	-0.162354	-1.122207	35.197221	0.036226	-1.049005	38.110429	0.039444	-1.109015	34.891412	-0.576402	-1.032186	31.583919	-0.513367	-0.932715	31.157192	-0.299407	-0.953401	28.415803	-0.170354	-0.823842	161.389988	-1.265852	-4.60416	43.997589	-0.059627	-1.302784	41.745989	-0.02	-1.244011	40.215347	-0.103911	-1.160743	33.627248	-0.455212	-1.107541
20130319	51295	JCPL			ZONE		57.84903	6.504715	2.454315	35.30323	0.407033	1.486197	37.913831	0.519126	1.664704	38.933532	1.645097	1.548435	42.690332	2.247926	1.632407	47.688841	4.011362	1.587478	63.240417	0.066858	2.223559	57.761836	-19.49467	2.446506	64.563566	1.861269	2.122297	83.412913	2.842985	2.969928	43.956751	2.74478	1.371971	73.346071	3.287205	2.398866	37.547576	-3.463276	1.460851	37.175555	-0.256088	1.221643	40.080025	0.028192	0.871833	38.504571	1.109697	0.894874	34.981301	1.115809	0.835492	34.314641	1.025203	0.879438	30.852501	0.622698	0.819803	176.468527	3.594554	5.613973	46.582491	0.195473	1.027018	44.032446	0.05036	0.972086	42.461182	0.234977	0.746205	37.159171	1.085279	0.883892
20130319	51296	METED			ZONE		57.425418	7.249201	1.286217	34.583125	0.452986	0.720138	37.162531	0.52	0.912531	37.597094	1.062604	0.79449	41.08598	1.438441	0.837539	45.141569	2.273848	0.777721	62.278263	0.06	1.268263	55.773702	-20.415649	1.379351	62.983894	1.009646	1.394247	80.988659	1.544615	1.844045	42.161755	1.50004	0.821715	70.754118	1.80237	1.291748	38.367562	-1.913458	0.73102	36.690714	-0.14046	0.621174	39.535385	0.018726	0.336659	37.092265	0.268991	0.323274	33.757509	0.386628	0.340881	33.357043	0.556825	0.390219	30.117207	0.35549	0.351717	171.466638	1.730668	2.475971	45.73975	0.107099	0.272651	43.320977	0.025571	0.285406	41.691034	0.075003	0.136031	35.815347	0.327972	0.297374
20130319	51297	PECO			ZONE		56.827149	6.5553	1.381848	34.397496	0.270118	0.717379	36.870936	0.277488	0.863449	37.613939	1.129531	0.744408	41.15195	1.545349	0.796601	46.065864	3.241755	0.734109	61.38741	-0.735607	1.173018	53.782765	-22.337984	1.310749	63.327685	1.503771	1.243913	81.717715	2.302293	1.815422	42.81909	2.234761	0.744329	71.626196	2.677288	1.288908	38.181709	-2.077288	0.708997	36.652949	-0.148668	0.591617	39.445611	-0.038835	0.304446	37.453154	0.622629	0.330525	34.152782	0.748889	0.373893	33.647991	0.826118	0.411873	30.30954	0.517379	0.382161	170.386502	0.039503	3.086999	45.746124	0.017222	0.368902	43.362611	0.042179	0.310432	41.814956	0.168618	0.166338	36.249646	0.757955	0.301691


Woot! Looks like it did work, it didnt look like this earlier. Although some data isnt perfectly lined up

This post has been edited by ayabrego: 21 March 2013 - 06:05 PM

Was This Post Helpful? 0
  • +
  • -

#11 jimblumberg  Icon User is online

  • member icon


Reputation: 4155
  • View blog
  • Posts: 12,944
  • Joined: 25-December 09

Re: storing data, best possible way?

Posted 21 March 2013 - 07:14 PM

Okay, now you need to post some code that shows you trying to open and parse this file. To be honest if you are just beginning to learn programming this is a fairly complicated file to parse. You may really want to start simpler.

Jim
Was This Post Helpful? 0
  • +
  • -

#12 #define  Icon User is offline

  • Duke of Err
  • member icon

Reputation: 1371
  • View blog
  • Posts: 4,752
  • Joined: 19-February 09

Re: storing data, best possible way?

Posted 21 March 2013 - 08:22 PM

Are you going to save the data to a CSV file or a tab delimited file?
Was This Post Helpful? 0
  • +
  • -

#13 ayabrego  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 43
  • Joined: 17-September 10

Re: storing data, best possible way?

Posted 21 March 2013 - 11:52 PM

I am trying to find a function that parses by comma? I haven't done parse in c++ only in VB. Is this something that I will have to manually?
Was This Post Helpful? 0
  • +
  • -

#14 #define  Icon User is offline

  • Duke of Err
  • member icon

Reputation: 1371
  • View blog
  • Posts: 4,752
  • Joined: 19-February 09

Re: storing data, best possible way?

Posted 22 March 2013 - 09:32 PM

On a stream you could use getline, with a comma as a delimiter. For the commas between the numbers though you could just use a char to read it.
Was This Post Helpful? 0
  • +
  • -

#15 jimblumberg  Icon User is online

  • member icon


Reputation: 4155
  • View blog
  • Posts: 12,944
  • Joined: 25-December 09

Re: storing data, best possible way?

Posted 23 March 2013 - 06:08 AM

First the file you posted is not a true CSV file. It doesn't have commas separating the fields it is using the tab character. So instead of looking for commas you will be looking for this tab character '\t'.

Jim
Was This Post Helpful? 0
  • +
  • -

  • (2 Pages)
  • +
  • 1
  • 2