|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
[C++\cli (Visual C++)] Convertire stringa in int??
Ciao a tutti!
Come si fa a convertire un System::String in un int? Ho visto su msdn che c'è un metodo TryParse ma non c'è un esempio di applicazione. Qualcuno se lo conosce può farmi un esempio, magari convertendo la variabile Pippo che è di tipo stringa ma contiene solo numeri in int. Grazie in anticipo.
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
in c# si usa cosí
Quote:
|
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Ma s sarebbe la variabile di tipo stringa?
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
Ovviamente scherzo ![]() Vabbé visto che sto post è praticamente inutile ti scrivo la "traduzione" in c++ \cli Codice:
String ^res="123"; int x=0; if(!Int32::TryParse(res,x)){ throw gcnew ArgumentException(); } |
|
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
![]() Ok ora provo..poi ti faccio sapere grazie come al solito! ![]()
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
String ^ res = Pippo; ecc... mi sa di no..
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Ho scritto così:
int x=0; if(!Int32::TryParse(SDO,x)) { throw gcnew ArgumentException(); } Dove SDO è System::String^ SDO; Poi quando faccio if(SDO <= SDO1) che dovrebbero essere due int mi da errore riguardo il segno <=. bool std::operator <= Che vuol dire? Che non mi converte in int?
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Quote:
![]() In pratica il confronto devi farlo con le variabili int, l'errore ti dice che l'operatore < non è definito per le stringhe. |
|
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
Il problema che ho è quello di ordinare due array di stringhe (che contengono numeri) dove uno ha gli elementi fissi (diciamo così per capire) e l'altro posso anche fare il sort in ordine crescente. Io volevo "giocare" con gli indici dei due array per ordinarli i ordine crescente. Faccio un esempio: Array1-------------Array2 S01----------------122 S02----------------101 S03----------------119 io volevo giocare con ll'indice dell'array 2 in modo tale da ordinare anche gli elementi dell'array1. Non so se sono chiaro?
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
ehm no non ho ben capito.....
![]() hai due array di stringhe, e queste stringhe sono numeriche giusto? Vuoi ordinarle numericamente quindi? E che nesso c'è fra i due array? Vanno ordinati allo stesso modo oppure sono indipendenti? Fammi un esempio pratico di cos'hai prima e cosa vuoi alla fine, così magari capisco ![]() |
![]() |
![]() |
![]() |
#12 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
Ho gli array di stringhe che ti ho scritto prima. Nell'Array1 ci sono gli elementi S01, S02, ecc.. e nell'array 2 ci sono SDO122, SDO101, ecc... Adesso me li stampa sul datagrid view nel modo in cui ti ho scritto prima. Io invece vorrei stampare l'array 2 in ordine crescente. Ho fatto il sort dell'array2 e si me li ordina in ordine crescente però gli elementi dell'array1 rimangono fissi e quindi non c'è più la giusta corrispondenza tra gli elementi. Il problema nasce dal fatto che gli elementi dell'array1 vengono ricavati da un file di testo e sono in ordine crescente già nel file di testo. Mentre gli elementi dell'array2 vengono presi da un altro file di testo. Sono stato più chiaro? sennò te lo rispiego senza problemi.
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
Invece di usare 2 array distinti prova ad usare un SortedDictionary<string,string>.
Una cosa del genere: Codice:
SortedDictionary<String^, String^> ^sd = gcnew SortedDictionary<String^, String^>(); sd->Add("SD132", "S01"); sd->Add("SD131", "S02"); sd->Add("SD133", "S03"); Codice:
for each (KeyValuePair<String^,String^> ^x in sd) { Console::WriteLine(x->Key + "-" + x->Value); } Console::Read(); ![]() Forse ci vuole un po' di teoria in più. Ogni volta che tu aggiungi con il metodo Add una coppia chiave valore, questa coppia viene posizionata tenendo conto dell'ordinamento sulla chiave. Ossia: 1) Primo Add, la chiave è SD132, essendo vuoto il dizionario aggiunge in posizione 0. 2) Secondo Add, la chiave è SD131, essendo SD131 minore di SD132, SD131 va in posizione 0 e SD132 slitta in posizione 2. ... e così via.... Questo perché, anche se è vero che non ci sono gli operatori <,>,= ecc per le stringhe, in realtà sono oggetti comparabili (implementano la classe IComparable). Spero di non averti creato confusione! Ultima modifica di astorcas : 15-09-2010 alle 11:47. |
![]() |
![]() |
![]() |
#14 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
Allora non so se questo metodo potrebbe dare problemi perchè 1) io non è che ho solo quei valori degli array ma variano in base ai file di testo che vengono letti. 2) I dati vengono letti dai file di testo linea per linea e "salvati" negli array di prima. 3) Se uso il tuo metodo come faccio a mandarli in stampa al datagridview?
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
1) Come variano i dati in questi file? Hanno un pattern fisso?
2) I dati devono essere per forza salvati in un array? 3) Quello te lo dico dopo ![]() |
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
2) Non necessariamente ma basta che li stampo sul datagridview e poi li posso mettere su un file di log. 3) ![]()
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
mmmm però aspetta, il tuo scopo è ordinare la datagridView?
Allora, lasciando perdere tutte le cose che ti ho detto fin ora, una volta fatto il bind ti potrebbe bastare una cosa così: Codice:
dgv->Sort(dg->Columns["NOME_COLONNA"], System::ComponentModel::ListSortDirection::Ascending); |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
ma scrivere un assembly managed in c# e referenziarlo nella parte che deve essere necessariamente e masochisticamente in c++/cli?
|
![]() |
![]() |
![]() |
#19 | |
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Quote:
e poi come faccio a stampare il log?! ![]() ![]() ![]()
__________________
Se devi fare una cosa falla fatta bene... sennò che la fai a fare?! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jan 2005
Città: Siena
Messaggi: 1313
|
mmmm ok. (anche se a me facendo dei test va)
Però a quanto ho capito, visto che piano piano mi dai sempre dettagli nuovi ![]() Va bene... allora dovresti aggiungere le coppie di valori invece che in due array separati al sorted dictionary di cui ti ho parlato prima. Quando chiami il metodo Add devi passare come primo parametro (chiave) la stringa che vuoi ordinare (quindi quelle tipo "SD132") e al secondo parametro (valore) la stringa associata (quindi quella del tipo "S01") ossia Codice:
sd->Add("SD132","S01"); ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:27.