Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Array in C#
giovedì 28 febbraio 2008 - 17.40
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
gio 28 feb 2008 - 17:40
salve, non ho capito dove commetto l'errore.
Ho un file txt con dei campi separati da virgole, questo file contiene arie lInee.
Attraverso il dataREader leggo la riga e attraverso il foreach ed il comando split mi creo l'array.
Il problema è che devo inizializzare l'array e dargli una dimensione che non conosco sin dall'inizio.
il codice è questo:
string[] aRiga = new string[10];
foreach (string s in aRiga)
{
Riga = tr.ReadLine();
aRiga = Riga.Split(',');
tw.WriteLine(aRiga[0]);
}
successivamente il dato lo deco salvare in una tabella MS SQL
come posso fare per evitare questo comando:
string[] aRiga = new string[10];
e quindi il dimensionamento dell'array?
Ho provato la stessa cosa col do while, ma non funziona e non ho capito il perché:
il codice è questo:
string[] aRiga = new string[10];
do
{
Riga = tr.ReadLine();
aRiga = Riga.Split(',');
tw.WriteLine(aRiga[0]);
} while (Riga != null);
qualche aiuto?
grazie
Gaetano
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
gio 28 feb 2008 - 19:49
ciao,
per fare quello che dici io vedrei 3 approcci:
1: usare il metodo della classe "System.IO.File.ReadAllLines()" che torna gia' un array di stringhe pieno di tutte le righe, cosi' puoi girare sulle righe
2: usare un generics, tipo "List<string>" e fare poi l'add della riga man mano che ti serve
3: usare il Slq Bulk Copy di Sql
Il primo è il classico per file non troppo grandi.
Il secondo è "comodo" ma non proprio performante all'aumentare delle righe, pero' è dinamico, e se ti serve un array dopo puoi chiamare il metodo "ToArray()" dopo che l'hai popolato.
Il 3o è quello che ti aiuta di piu' se il tuo lavoro è di importare dentro a sql un file di testo contenente delle righe. Non lo conosco dettagliatamente, percui ti rimando a qualche link che ti possa aiutare, nel caso ovviamente il tuo obbiettivo sia quello di importare dati in sql:
http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file
http://msdn2.microsoft.com/en-us/library/1y8tb169
(VS.80).aspx
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
sab 1 mar 2008 - 10:15
ciao ti ringrazio per la risposta, ma la riga comprende più campi che devo separare ed il 3 metodo non va bene perchè non posso usare il bulk su Aruba.
Ti ringrazio
Gaetano
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 1 mar 2008 - 16:17
>ciao ti ringrazio per la risposta, ma la riga comprende più campi
>che devo separare ed il 3 metodo non va bene perchè non posso
>usare il bulk su Aruba.
si effettivamente quello non si puo' fare...alla fine allora sei riuscito lo stesso?
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
dom 2 mar 2008 - 15:23
ciao Matte,
si, il codice funziona, essendo inesperto, non mi sono accorto, che durante il ciclo ha dato l'errore, perché un campo data è vuoto. Quindi io mi sono soffermato sul codice e non sul controllo dei dati.
Per la prossima volta mi sai consigliare come posso fare a controllare se il ciclo s'interrompe e se c'è la possibilità di visualizzare i codici o una barra di scorrimento?
grazie
Gaetano
P.S.:
scusami non riesco ad effettuare il controllo su data vuota. Nel file di testo, quando manca il dato le 2 virgole sono consecutive e senza spazio.
Ho provato con questo controllo (C#):
if (aRiga[3] != null)
e con questo
if (aRiga[3] != ""),
ma in nessuno dei due casi mi ritorna la mancanza del dato. Mica sai se c'è qualche comando empty?
grazie
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
lun 3 mar 2008 - 14:34
in vb si usa una cosa del tutto simila a not isdbnull(campo)...
Al 99,999% c'è una cosa molto molto simile! ;)
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
lun 3 mar 2008 - 15:17
provo
grazie
Gaetano
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
lun 3 mar 2008 - 15:19
ciao,
si il controllo da fare è:
if (Riga[3] != DbNull.Value)
in questo caso viene controllato il tipo particolare di valore nullo proveniente dal db.
Il resto dei controlli possono essere corretti se il campo è stringa e ci salvi dentro una data, se invece sul db è data, o sara' nullo (quindi il controllo con DbNull.Value) oppure sara' una data valida, quindi non dovresti avere problemi in questo senso.
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
lun 3 mar 2008 - 15:28
ti ringrazio, nel caso volessi fare il contrario?
DateTime a = DateTime(" / / ");
cioè devo passare ad unca mpo DateTime della Tabella di MS SQL un campo data vuoto
ho provato anche con:
DateTime a = null;
ma non va
Gaetano
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
lun 3 mar 2008 - 15:28
Grazie teo per la traduzione simultanea!
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
lun 3 mar 2008 - 15:30
Grazie teo per la traduzione simultanea!
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
lun 3 mar 2008 - 17:23
x Samuele:
di niente, il mio post cominciava con un "si,..." e il "si" era riferito a quello che avevi detto tu del DbNull
x Gaetano:
ma cosa intendi dire che non va, ti da errore la query?
Ma la query come la fai, usi i parametri? se si ti basta mettere un parametro con "DbNull.Value" come valore...oppure impostando nella DataTable sempre questo valore.
Eventualmente prova a postare 1po di codice che cosi' si capisce meglio dove potrebbe essere l'errore.
Grazie.
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
mar 4 mar 2008 - 15:22
grazie a tutti per le risposte, allora
ho un file csv, di cui leggo ogni singola riga. La riga la trasformo in un array attraverso lo Split.
Lo stesso campo può o meno avere la Data e lo controllo attraverso:
if (aRiga[15] != string.Empty)
{
Response.Write("Data Piena");
Data = DateTime.Parse(aRiga[15]);
}
else
{
Response.Write("Data Vuota");
Data = DateTime.Parse(" / / ");
}
Poi valorizzo il parametro con il valore della var Data.
Non riesco a passare la data vuota al dataBase
Spero di essere stato chiaro
ciao
Gaetano
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
mer 5 mar 2008 - 09:02
Ma che senso ha avere una data vuota?
O è nothing, allora il parse date non funziona oppure una data la deve contenere.
Fare un parse date di (" / / ") non ha proprio senso logico!
Non capisco cosa vuoi fare!
Se devi salvarlo nel db, fa presto, gli assegni un dbnull.value, se invece devi scrivere una data vuota perchè nel db c'è null, gestisci l'eccezione con il codice, riconoscendo il valore dbnull nel db.
Non capisco cosa vuoi fare...
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
mer 5 mar 2008 - 10:47
ciao,
non se la logica e la sequenza delle istruzioni che adopero sia giusta.
Ho un array ed alcuni di questi hanno una data.
Assegno alle variabili, il valore dell'array ed in questa controllo se ci sono dei campi data vuoti,
Faccio il controllo e se la data non c'è metto data vuota.
Poi ho definito i parametri ed a questi assegno le variabili.
Poi effettuo l'inserimento nel database.
Ho provato ad assegnare alla variabile il valor dbnull, ma mi ritorna l'errore.
E' per questo che mi serve assegnare una data vuota alla variabile.
Ho trovato un link, me lo leggo e ti faccio sapere se funziona.
ciao
Gaetano
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
mer 5 mar 2008 - 11:49
>ciao,
>
>non se la logica e la sequenza delle istruzioni che adopero sia
>giusta.
La logica è giusta, per il programmatore che la decide.
Se hai deciso che le operazioni devono essere eseguite in questo modo, non posso dirti altro se non che è giusta.
>Ho un array ed alcuni di questi hanno una data.
>Assegno alle variabili, il valore dell'array ed in questa controllo
>se ci sono dei campi data vuoti,
E' qui che non siamo daccordo! Cosa vuol dire data vuota? Mi fai un esempio? E già che ci sei, mi spieghi anche cosa vuol dire intero vuoto? O Byte vuoto?
Non esiste!
L'unica cosa a cui puoi assegnare un valore "vuoto" è una stringa, perchè non ci metti dei caratteri. Ma la stringa, come variabile, contiene comunque un dato. Una stringa di lunghezza 0.
Un intero vuoto non esiste!
Esiste solo un intero a cui tu hai dato il significato di vuoto! Mettiamo 0....
Lo stesso per le date.
L'unica cosa che si avvicina ad essere una data vuota, è una variabile data acui hai dato il valore di null o nothing o quello che vuoi. Un puntatore, cioè, a nulla. A una posizione di memoria che non esiste. In questo caso, tu puoi capire che il dato contenuto non è valido.
Ma altrimenti, se una variabile esiste, contiene un dato.
Tu devi decidere se quel dato è valido o no.
Non esistono comunque variabili vuote.
Decidi tu, se consideri non attendibile, per esempio, la data del 01/01/1900.
Ma fare il parswe di una data uguale a " / / " non ha senso, non esiste, non potrà mai portare a nessun risultato.
La logica è perfetta, ma si pasa su un principio che non funziona... purtroppo.
>Faccio il controllo e se la data non c'è metto data vuota.
>Poi ho definito i parametri ed a questi assegno le variabili.
>Poi effettuo l'inserimento nel database.
>Ho provato ad assegnare alla variabile il valor dbnull, ma mi
>ritorna l'errore.
Perchè il dbnull, lo devi mettere nel db.
Assegnagli il valore nothing (questo in vb, mi pare sia lo stesso in c#. Se lo scrivi e diventa blu, è giusto.
DBnull, va salvato nel db. Nothing nelle variabili.
>E' per questo che mi serve assegnare una data vuota alla variabile.
Però il concetto di data vuota non esiste. Puoi solo o annullare la variabile o assegnare un valore a cui tu hai dato senso nullo.
>Ho trovato un link, me lo leggo e ti faccio sapere se funziona.
Facci sapè.
>ciao
>Gaetano
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
mer 5 mar 2008 - 15:30
ti ringrazio per l'esaurinete spiegazione.
Il file csv è composta da dati separati davirgole e quando la data non è presente è una sequenza di 2 virgole.
1,01/01/2007,a
2,,b
a questo punto per il rigo 2 l'array non avrà alcun valore.
Questo intendo per variabile vuota e quando salvo il movimento mi dice che non può effetuare la trasformazione da string a DateTime
ciao
Gaetano
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
mer 5 mar 2008 - 16:18
>ti ringrazio per l'esaurinete spiegazione.
Di niente, immaginarsi....
>Il file csv è composta da dati separati davirgole e quando la
>data non è presente è una sequenza di 2 virgole.
Perfetto! Ma sul csv, non hai nemmeno una variabile! E' una stringa!
>1,01/01/2007,a
E qui prenderai l'1 nell'intero, la data 01/01/2007 nella data e a nella stringa. Ok.
>2,,b
E qui prenderai 2 nell'intero, Nothing nella data oppure una tua data che consideri null, come il 01/01/1900, e b nella stringa
>
>a questo punto per il rigo 2 l'array non avrà alcun valore.
La stringa sarà una stringa vuota o tuttal'più nothing
>Questo intendo per variabile vuota e quando salvo il movimento
>mi dice che non può effetuare la trasformazione da string a DateTime
Per forza, perchè lui cerca di convertire una data! E la data non c'è. Quindi non puoi inizializzare una data con una data che non esiste! Punto. Abbandona questo concetto.
Non puoi mettere una data "vuota" in una variabile data, perchè la data "vuota" non esiste.
Puoi solo mettere o una data che per te non ha significato (ti riporto di nuovo l'esempio di prima, se vuoi) oppure metti a nothing la variabile!
>ciao
>Gaetano
Spero di essere stato maggiormente chiaro.
Il problema è che il parse non accetta se non date correttamente formate. " / / ", non è una data correttamente formata. Non riuscirai mai a farla passare.
Dovrai getire i due casi:
1- la data è di lunghezza = ad 8:
|--> la dariabile data è uguale al parse della stringa.
2- la data è di lunghezza diversa (se è di 12 caratteri, di 3, di 7... Saranno date non valide! Al limite 6 caratteri è ammissibile....)
|--> La variabile data va settata a nothing, perchè non esiste una data velida.
Ok?
gae58
Profilo
| Senior Member
467
messaggi | Data Invio:
mer 5 mar 2008 - 17:33
ti ringrazio, adesso è tutto + chiaro
ciao
Gaetano
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !