Upload de fichier en lecture à la mémoire et à l'utiliser comme fichier de texte est-il une meilleure façon?
J'ai un intranet, application hébergée sur le web où l'utilisateur de télécharger un fichier texte avec un espace délimité par des données en 5 colonnes. Je ne souhaite pas enregistrer le fichier, donc je voulais juste l'utiliser dans la mémoire. J'ai essayé de nombreux exemples sur le web et aucun n'a fonctionné. Enfin, un collègue m'a montré comment faire. Voici le code, et je me demande si il y a une meilleure façon de le faire. En fin de compte, tout ce que je veux, c'est un moyen de relier les données à un contrôle gridview ou d'un répétiteur pour la visualisation et la plus tard de stockage dans une base de données (SQL Server).
Le téléchargement de fichiers asp ID tag est SurveyFileUpload
Le SurveyDate est un asp:champ de saisie
Int32 fileLen = SurveyFileUpload.PostedFile.ContentLength;
//Create a byte array to hold the contents of the file.
Byte[] buffer = new Byte[fileLen];
//Initialize the stream to read the uploaded file.
Stream s = SurveyFileUpload.FileContent;
//Read the file into the byte array.
s.Read(buffer, 0, fileLen);
//Convert byte array into characters.
ASCIIEncoding enc = new ASCIIEncoding();
string str = enc.GetString(buffer);
testReadFile(str, db_surveyDate.Text);
protected void testReadFile(string inFileString, string inSurveyDate)
{
string[] lines = inFileString.Split('\n');
curFileListing.InnerHtml = "";
int curRow = 1;
var readings = from line in lines
select new
{
//this is just for display purposes to show the number of rows on the page
Row = curRow++,
SurveyDate = inSurveyDate,
ItemNumber = Regex.Split(line, "[ ]+")[0],
Northing = Regex.Split(line, "[ ]+")[1],
Easting = Regex.Split(line, "[ ]+")[2],
Elevation = Regex.Split(line, "[ ]+")[3],
Name = Regex.Split(line, "[ ]+")[4]
};
saveFileData.Visible = true;
GridView fileData = new GridView();
fileData.DataSource = readings;
fileData.DataBind();
fileData.AlternatingRowStyle.BackColor =
System.Drawing.ColorTranslator.FromHtml("#eee");
curFileListing.Controls.Add(fileData);
}
Cela fonctionne OK. Je ne suis pas bien informé avec LINQ et j'ai eu un moment difficile avec le flux de fichier de la partie.
Vous devez vous connecter pour publier un commentaire.
J'utilise cette méthode. Je suis de la lecture dans les numéros d'identification à partir d'un fichier texte avec un numéro d'identification par ligne:
Bien, vous pourriez exécuter Regex.Split(ligne, "[ ]+") qu'une seule fois et d'utiliser les résultats enregistrés pour remplir les champs. Regex est assez cher en comparaison.
Aussi, avez-vous vérifié pour voir si il y a de gauche sur '\r' dans vos champs? De nombreux fichiers de texte contiennent à la fois des '\n' et '\r'.
Autres que les suggestions de MandoMando, il n'y en a pas beaucoup. Je suis en supposant qu'elle est le prototype de code (basé sur le nom de la méthode), ou je dirais le traitement de fichiers de choses doivent être encapsulées dans une classe à encapsuler le format, et d'isoler les modifications.
La mise en œuvre de la proposition de retrait de la \r est assez simple.
Pour nettoyer les appels supplémentaires pour les fonctions regex, vous pourriez faire comme si. Je n'ai pas 2008/10 au travail pour tester ces, mais ils doivent travailler.