|
Of course i've already known what the problem is from the description of Visual Studio debug mechanisms, but i just cannot fix it. I won't post this message if I didn't read documents or searching on google or try to solve it by myself. Anyway, thanks for your suggestion.
|
|
|
|
|
zkii wrote: but i just cannot fix it.
What do you think we can do in a forum to help you diagnose the problem? We don't have access to your system to perform the diagnosis. Secondly there is no magical incantation we can chant that will fix the problem.
If you can't solve the problem the root cause of that is you don't understand the documentation. If you did, you would use the understanding to diagnose and fix the problem. Therefore my suggestion remains the same, read the documentation.
|
|
|
|
|
Hi, I am trying to make my application read fields from a string array (by reading from a .csv file), assign each single field to a new string and then cast it double. I am however having problems setting the delimiters in C+/CLI.
The code I previously wrote for C++ (reported at the end) was working file, but I can't find anywhere how to set similar delimiters using C++/CLI.
array<String^>^ Cell= gcnew array<String^>(100);
StreamReader^ sr = gcnew StreamReader( "INPUT.csv" );
while(sr->Peek() >= 0)
{
for(int i = 0; i<100; i++)
{
String^ Value0AsString= Cell[i++];
String^ Value1AsString= Cell[i++];
String^ Value2AsString= Cell[i++];
double Value0= double:: Parse( Value0AsString);
double Value1= double:: Parse( Value1AsString);
double Value2= double:: Parse( Value2AsString);
}
}
The delimiters I would like to use are the following (code in c++):
string Cell[100];
int i = 0;
ifstream INPUT ("INPUT.csv");
while (! INPUT.eof())
{
if ((i + 1) % 3 == 0) getline(INPUT, Cell[i++]);
else getline(INPUT, Cell[i++], '\,');
}
....rest of the code
Any advice is welcome!
|
|
|
|
|
You could just your regularexpressions and not worry with parsing it yourself.
a programmer traped in a thugs body
|
|
|
|
|
You are correct, the String.Split method is what you want. See the documentation[^] for an example of how to set up your delimiters in Managed C++.
Dybs
|
|
|
|
|
Hi Dybs, thanks for the reply. However I can't find any good example on the correct syntax for the String.Split method in C++/CLI...Any suggestion is welcome!
|
|
|
|
|
The link in my previous post is to the MSDN documentation for the String.Split method. Click on the first overload of the method (String(char[])), and scroll about 2/3 to the bottom. You will see examples of how to use the function in VB, C#, and Visual C++ (same thing as C++/CLI). The example should give you what you need.
Dybs
|
|
|
|
|
Hi Dybs, many thanks for the clarification. Now I manage to split the string but still I am unable to set delimiters for StreamReader. I've looked extensively on the web but I can't see pertinent examples for C++/CLI.
I would need StreamReader (or
String ^line = reader.ReadLine(); ) to read up to the 3rd value of a CSV file and in another instance I need it to stop reading when it meets the end of the line.
Do you have any idea on how to specify these delimiters please?
I'd really appreciate your help.
|
|
|
|
|
Please read the documentation more closely. In the link I posted previously, you'll notice several overloads of String.Split. If you bother to read the descriptions of the overloads, you'll see there's one that fits your requirements quite nicely. All I'll say is you need one overload to split the string to the end of the line, and another to split the string and only get the first 3 values (or however many you want). Again, you can find the sample code in the documentation.
For future reference, the MSDN documentation is your friend. You could have figured this out on your own in 5 minutes by Googling "System.String" and looking at the functions available for the string class. If you need to know what functions are available for any .NET class, Google the fully-qualified name of the class (namespace.class) and the first couple of links will give you exactly what you need.
Dybs
|
|
|
|
|
Hi!
I'm coding a CLR/C++ DLL but i have problems with SqlDataAdapter reading data.
There's a sample code:
SqlConnection ^ coneccion =
gcnew SqlConnection("Data Source=datamaster;Initial Catalog=Molinstec_CSMARTA;Integrated Security=True");
SqlDataAdapter ^ da =
gcnew SqlDataAdapter("select current_timestamp", coneccion);
DataSet ^ ds = gcnew DataSet();
coneccion->Open();
da->Fill(ds,"data");
coneccion->Close();
DateTime ^ dateTime = (DateTime^)ds->Tables["data"]->Rows[0];
Console::WriteLine(dateTime);
return 0;
When i run it , throw a exception because ds->Tables["data"] is null. If i change "data" to 0 the same problem.
Someone see the problem?
Thanks!
|
|
|
|
|
What does ds->Tables->Count returns? Have you tried executing this query in query browser?
CNTX! wrote: "select current_timestamp"
You don't need a DataSet here. Just use ExecuteScalar and get the result.
|
|
|
|
|
Thanks for the answer!
Fist, in quickwatch ds->Tables->Count == 1.
The query "select current_timestamp" it's just and example... the query is "select * from table where id = @id".
I add the parameter and set the value...
Ds->Tables[tableName]->Rows[0] must return the first datarow of the table tableName en the dataset ds.
If i run the query directly in sql got no problem... First i think that could be an parameter problem, so i directly put "where id = 1" and don't work
|
|
|
|
|
Hi guys,
i am writing a program that get data from a sqlite database and add the records to a string array. But i not sure how to add to the string array. i search few ways on net and try out, but it didnt work. Below is my coding :
string signature_array[100];
int count =0;
SQLiteConnection ^connection = gcnew SQLiteConnection("Data Source=test.db3;Pooling=True");
connection->Open();
SQLiteCommand ^cmd = gcnew SQLiteCommand(connection);
SQLiteDataReader ^reader = cmd->ExecuteReader();
while (reader->Read())
{
signature_array[count]=reader->GetString(2);
count++;
}
reader->Close();
kindly help me.. i am using visual C++ pro 2008...
Thank you.
Regards,
Thilek
|
|
|
|
|
Thilek wrote: string signature_array[100];
This is not a C++/CLI array. In C++/CLI, strings are written like String^ . And array is created like
array<String^>^ stringArray = gcnew array<String^>(arrayLength) In your case, a generic List(String^) will be appropriate.
List<String^>^ stringList = gcnew List<String^>();
SQLiteConnection ^connection = gcnew SQLiteConnection("Data Source=test.db3;Pooling=True");
connection->Open();
SQLiteCommand ^cmd = gcnew SQLiteCommand(connection);
SQLiteDataReader ^reader = cmd->ExecuteReader();
while (reader->Read())
{
stringList->Add(reader->GetString(2));
}
reader->Close(); This will avoid maintaining a count variable explicitly. List is capable to expand and shrink whenever required.
For SQLiteConnection and SQLiteCommand , you can use stack semantics which will ensure the objects are disposed once the scope ends. I can't see you are disposing them in your code.
|
|
|
|
|
i try using this and i got the following errors :-
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(114) : error C2065: 'List' : undeclared identifier
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(114) : error C2275: 'System::String' : illegal use of this type as an expression
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::String'
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(114) : error C2059: syntax error : '>'
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(143) : error C2065: 'stringList' : undeclared identifier
c:\documents and settings\thilek\desktop\sparta test\trial.cpp\Scanner.cpp(143) : error C2227: left of '->Add' must point to class/struct/union/generic type
type is ''unknown-type''
Scanner.cpp
.\Scanner.cpp(114) : error C2065: 'List' : undeclared identifier
.\Scanner.cpp(114) : error C2275: 'System::String' : illegal use of this type as an expression
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : see declaration of 'System::String'
.\Scanner.cpp(114) : error C2059: syntax error : '>'
.\Scanner.cpp(143) : error C2065: 'stringList' : undeclared identifier
.\Scanner.cpp(143) : error C2227: left of '->Add' must point to class/struct/union/generic type
type is ''unknown-type''
|
|
|
|
|
Thilek wrote: 'List' : undeclared identifier
Have you added using namespace System::Collections::Generic ?
|
|
|
|
|
thanks bro.. its working
|
|
|
|
|
hi..I'm getting this error message when i compile my program. Can anyone help me out to identify
what does the error means??
Thank you.
sqlite3.lib(shell.obj) : fatal error LNK1313: ijw/native module detected; cannot link with pure modules
|
|
|
|
|
Hi,
I have never seen this before, my best guess is:
it looks like you are building a managed application (C++/CLI) and you have included into your project a native code file. Native code files probably don't need to be mentioned at all in your solution pane; if you do, then their build action should be reduced to "none" or "copy to output folder" or something like that, they don't need any compilation/linking.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Luc Pattyn wrote: they don't need any compilation/linking.
In this case, OP is using a static library and it requires linking. But an application compiled with /clr:pure doesn't support linking native static libraries, I guess.
|
|
|
|
|
Looks like you are trying to link static SqlLite library to a application compiling with /clr:pure . You should try managed libraries[^] to connect to SqlLite instead. Also if possible, try to compile your application using /clr switch.
For the error message, MSDN[^] says,
The current version of Visual C++ does not support linking native or mixed managed/native (also called IJW) .obj files with .obj files compiled with /clr:pure.
|
|
|
|
|
Hi Guys,
I need to display this output as "A" in the first cell and "B" in the cell next to it but it does not seem to work as intended. It's all displayed as "A,B" in a single cell! Any idea on how to add a separator please?
Cheers.
String^ fName1 = "My File.csv";
StreamWriter^ outStream = File::CreateText(fName1);
outStream->Write("A");
outStream->Write(",");
outStream->Write("B");
outStream->NewLine;
outStream->Close();
|
|
|
|
|
When you open the file in Excel, open it as a comma delimited file and set the parse character to a comma.
|
|
|
|
|
Shouldn't that be
outStream->Write(outStream->NewLine);
Anyway, your code writes a comma separated value file. "Cells" are determined by
the consumer of the file interpretating the commas correctly. What are you using
to parse the CSV into "cells"?
The file produced by the above code opens in Excel correctly if you write the newline
correctly, without having to explicitly set the delimiter.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
Your code behaves like mine (although it is written slightly differently) and adds a new line.
Therefore the next value is written one cell below (I use Excel by the way, and I have no problems opening CSV files created with the good old C++).
What I'd like to do instead is to write the following value next to the first one along the same line.
Sorry I wasn't terribly clear in my first post.
|
|
|
|