Split un file e inserirlo in un arraylist

giovedì 06 maggio 2010 - 19.42

ilario Profilo | Senior Member

ciao
dovrei fare uno split di un file contenente un elenco di istruzioni sql che finiscono tutte con ;
e inserirle in un arraylist

questo mi serve per dividere il file in due data nr di riga

ad esempio le prime 10 righe scriverle poi in un file 1
e le rimanenti scrivere un file 2

accetto anche suggerimenti di divisione file


avevo pensato a questo

dim testofile as string = ""

testofile = file.readalltext (nomefile)

dim righesql as new arralist( testofile.split(";" & enviroment.newline) )

............


ho inserito il ritorno a capo, perche il carattere ";" può comparire anche all'interno della riga es testo html e quindi avevo pensato a ; + ritorno a capo

ma non funziona perche mi spitta in più punti non solo alla fine dell'istruzione ma all'interno

come posso fare ?

ciao
ilario

kataklisma Profilo | Senior Member

>ciao
Ciao!

>dovrei fare uno split di un file contenente un elenco di istruzioni
>sql che finiscono tutte con ;
>e inserirle in un arraylist
>............
>ho inserito il ritorno a capo, perche il carattere ";" può comparire
>anche all'interno della riga es testo html e quindi avevo pensato
>a ; + ritorno a capo
>
>ma non funziona perche mi spitta in più punti non solo alla fine
>dell'istruzione ma all'interno
>
>come posso fare ?

Splitta comunque in coincidenza con il carattere ";" o no?

>ciao
;) ciao

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

ilario Profilo | Senior Member

si in coincidenza del ; lo divide, non mi tiene in considerazione il ritorno a capo

ilario Profilo | Senior Member

ho provato anche a caricarlo linea per linea , ma non va bene stranamente mi divide il testo html


OpenFileDialog1.ShowDialog() sr = New StreamReader(OpenFileDialog1.FileName) riga = sr.ReadLine While Not riga Is Nothing ListBox1.Items.Add(riga) riga = sr.ReadLine End While MessageBox.Show(ListBox1.Items.Count - 1)

ti allego anche il file aprilo semplicemente come file di testo

all'interno ci sono delle istruzioni sql per mysql inteoria ogni riga è un istruzione quindi dovrebbero essere solo 6 righe
invece mi dice (ListBox1.Items.Count - 1 = 35
mi considera la parte html come rige a se

piccola annotazione se lo apro con php me le divide esattamente
ciao
ilario




kataklisma Profilo | Senior Member

Buongiorno!

>ho provato anche a caricarlo linea per linea , ma non va bene
>stranamente mi divide il testo html
>....
>....

Per evitare ogni genere di problema potresti pensare di effettuare un replace del carattere ";" con un carattere meno usuale, per esempio "§", il tutto ovviamente a runtime e riconoscendo se il ";" è un delimitatore sql o html.

Ti posto un piccolo blocco di codice, che per abitudine ho scritto in C# :

private void retrieveSqlStatement_Click(object sender, EventArgs e) { StreamReader reader = new StreamReader(@"C:\oscommerce.ila"); string currentLine = string.Empty; string newGeneratedText = string.Empty; char specialSplitter = '§'; ArrayList sqlStatement = new ArrayList(); while (reader.EndOfStream == false) { currentLine = reader.ReadLine(); if ((currentLine != "")) { if (currentLine[currentLine.Length - 1] == ';') { currentLine = currentLine.Remove(currentLine.Length - 1); currentLine += specialSplitter; newGeneratedText += currentLine.Replace(';', specialSplitter); } else { newGeneratedText += currentLine; } } } string[] splittedSQL = newGeneratedText.Split(specialSplitter); }

In pratica il codice non fa altro che caricare riga per riga il file di testo, la riga corrente viene analizzata per capire se ";" è presente a fine riga e quindi è un delimitatore di uno statement SQL.

Se cosi fosse rimpiazza ";" con "§" e passa ad analizzare il resto del testo.

Tutto viene salvato in una variabile temporanea di nome newGeneratedText che poi viene splittata in splittedSQL.

>ciao

Ciao ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

ilario Profilo | Senior Member

grazie mille

l'ho provato e sembra funzionare , faccio un pò di prove

non capisco questo passaggio
newGeneratedText += currentLine.Replace(';', specialSplitter);

if (currentLine[currentLine.Length - 1] == ';') ' qui controlli se la riga finisce con ; ok
{
currentLine = currentLine.Remove(currentLine.Length - 1); rimuovi ; ok
currentLine += specialSplitter; aggiungi il carattere speciale e ok

newGeneratedText += currentLine.Replace(';', specialSplitter); ma qui perchè cambi tutti ; con il carattere speciale anche quelli nel testo html e.....
}
else { newGeneratedText += currentLine; } ok
}

grazie

ciao
ilario

kataklisma Profilo | Senior Member

>grazie mille

:)

>l'ho provato e sembra funzionare , faccio un pò di prove
>
>non capisco questo passaggio
>newGeneratedText += currentLine.Replace(';', specialSplitter);

scusami, errore mio...oggi ho un po la testa tra le nuvole!
Dovrebbe essere cosi newGeneratedText += currentline!


>grazie
Di niente ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

ilario Profilo | Senior Member

grazie funziona benissimo

ho solo tolto la riga che rimuove ; perche altrimenti dovrei inserirlo successivamente, perche serve all'istruzione sql

while (reader.EndOfStream == false)
{
currentLine = reader.ReadLine();
if ((currentLine != ""))
{
if (currentLine[currentLine.Length - 1] == ';')
{
currentLine += specialSplitter;
newGeneratedText += currentLine;
}
else { newGeneratedText += currentLine; }
}
}
string[] splittedSQL = newGeneratedText.Split(specialSplitter);
}

buona serata
ilario

kataklisma Profilo | Senior Member

>grazie funziona benissimo

Di niente :)

>ho solo tolto la riga che rimuove ; perche altrimenti dovrei
>inserirlo successivamente, perche serve all'istruzione sql

Bene, era un codice che dovevi adattare alle tue reali esigenze ;)

>buona serata
Ciao!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5