2011-11-10 4 views
1

Je lis à partir d'un fichier texte en C# en utilisant une instruction SQL. Voilà ce que je me sers:Lire à partir du fichier texte

var strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + importFolder + ";Extended Properties=\"text;HDR=No;IMEX=1;FMT=Delimited\""; 
var conn = new System.Data.OleDb.OleDbConnection(strconn); 
var da = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [" + file + "]", conn); 

Cela fonctionne très bien, mais il comprend les lignes vides en bas du fichier. Est-il possible de faire ignorer ou ignorer les lignes vides?

Merci!

Code Plus:

var importFolder = Path.GetDirectoryName(savedfile); 
var file = Path.GetFileName(savedfile); 

var strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + importFolder + ";Extended Properties=\"text;HDR=No;IMEX=1;FMT=Delimited\""; 
var conn = new System.Data.OleDb.OleDbConnection(strconn); 
var da = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [" + file + "]", conn); 
da.Fill(Exceptions); 
+0

est le contenu du fichier de confiance? Vous pourriez avoir besoin de s'inquiéter de la vulnérabilité d'injection SQL? – McKay

Répondre

2

Je pense que je voudrais créer un nouveau fichier de l'ancien fichier en utilisant quelque chose comme ceci (en supposant que le fichier est assez petit pour tenir dans la mémoire):

var oldLines = File.ReadAllLines(file); 
var newLines = oldLines.Where(s => !string.IsNullOrWhitespace(s)); 
File.WriteAllLines(newFileName, newLines); 

EDIT:

J'oublie toujours de cette nouvelle méthode, qui contourne l'exigence « assez petit pour tenir dans la mémoire »:

var oldLines = File.ReadLines(file); 
var newLines = oldLines.Where(s => !string.IsNullOrWhitespace(s)); 
File.WriteAllLines(newFileName, newLines); 

readlines retourne un IEnumerable<string>; il ne lit pas tout le fichier en mémoire.

+0

C'est une autre façon de le faire aussi. – McKay

+0

Merci! Cela signifie-t-il que je n'ai pas besoin des parties strconn, conn et da? –

+0

Non, vous avez toujours besoin de toutes ces parties, mais vous les utilisez pour lire le nouveau fichier (temp?) Dont vous avez supprimé les lignes vides. – phoog

0
file.Trim() 
// or 
file.Trim('\r', '\n') 
// or 
file.TrimEnd('\r', '\n') 

Toutes les supprimera les lignes vides à la fin, mais se comportent un peu différemment d'une autre manière.

+0

Ne supprime pas toutes les lignes vides. Seulement ceux à la fin. – Fantius

+0

@Fantius Ou dans le cas des deux premiers, et au début. – McKay

+0

@McKay Merci! Est-ce que je mets le Trim à la fin du fichier dans le Select? Comme: "SELECT * FROM [" + file.Trim() + "]" –

1

Vous pouvez faire quelque chose comme ceci:

new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [" + file + "] where SomeImportantColumn is not null and SomeImportantColumn <> ''", conn); 
Questions connexes