web-dev-qa-db-fra.com

Comment puis-je lire le fichier CSV téléchargé sans l'enregistrer sur le serveur?

Bonjour à tous, j'ai des fichiers CSV qui sont dans ce format:

**CSV Format1**

  ||OrderGUID||OrderItemID||Qty||SKUID||TrackingNumber||TotalWeight||DateShipped||DateDelivered||ShippingStatusId||OrderShippingAddressId
  ||5        ||3          ||2  ||12312||aasdasd       ||24         ||2012-12-2010||            || 10025          ||10028
  ||5        ||4          ||3  ||113123||adadasdasd   ||22         ||2012-12-2012||            ||10026           ||10028



**CSV Format2**

    ||"OrderGUID"||"OrderItemID"||"Qty"||"SKUID"||"TrackingNumber"||"TotalWeight"||"DateShipped"||"DateDelivered"||"ShippingStatusId"||"OrderShippingAddressId"||
    ||"5"        ||"3"          ||"2"  ||"12312"||"aasdasd"       ||"24"         ||"2012-12-2010"||""            || "10025"          ||"10028"||
    ||"5"        ||"4"          ||"3"  ||"113123"||"adadasdasd"   ||"22"         ||"2012-12-2012"|| "2012-12-2010" ||"10026"           ||"10028"||

Je dois lire ces fichiers sans les enregistrer sur le serveur. Quelqu'un peut-il m'aider? Comment puis-je lire ces fichiers et les insérer dans ma base de données? Comment puis-je couper les caractères spéciaux des fichiers?

C'est ce que j'essaie de faire pour le téléchargement de fichier:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ImportTrackingNumber(FormCollection form,HttpPostedFileBase UploadedFile,TrackingNumbersModel Trackingnumbers)
{
    if (UploadedFile != null)
    {
        var allowedExtensions = new[] {".xlsx", ".csv"};
        if (UploadedFile.ContentLength > 0)
        {                   
            var extension = Path.GetExtension(UploadedFile.FileName);
            if (extension == ".xlsx")
            {
                //Need To code For Excel Files Reading
            }
            else if (extension == ".csv")
            {
                //string filename = Path.GetFileName(UploadedFile.PostedFile.InputStream);
                StreamReader csvreader = new StreamReader(UploadedFile.FileName);
                DataTable dt;        
            }
        }
    }
    return View();
}
16
SoftwareNerd

Juste un exemple sur la façon dont vous pouvez lire le fichier téléchargé sans l'enregistrer sur le serveur:

// Use the InputStream to get the actual stream sent.
StreamReader csvreader = new StreamReader(UploadedFile.InputStream);

while (!csvreader.EndOfStream)
{
    var line = csvreader.ReadLine();
    var values = line.Split(';');
}
39
Mario Sannum

Ceci est mon code:

public static DataTable GetDataTabletFromCSVFile(HttpPostedFileBase file)
{
    DataTable csvDataTable = new DataTable();

    // Read bytes from http input stream
    var csvBody = string.Empty;

    using (BinaryReader b = new BinaryReader(file.InputStream))
    {
        byte[] binData = b.ReadBytes(file.ContentLength);
        csvBody = Encoding.UTF8.GetString(binData);
    }

    var memoryStream = new MemoryStream();
    var streamWriter = new StreamWriter(memoryStream);
    streamWriter.Write(csvBody);
    streamWriter.Flush();
    memoryStream.Position = 0;

    using (TextFieldParser csvReader = new TextFieldParser(memoryStream))
    {
        csvReader.SetDelimiters(new string[] { "," });
        csvReader.HasFieldsEnclosedInQuotes = true;
        string[] colFields = csvReader.ReadFields();
        foreach (string column in colFields)
        {
            DataColumn datecolumn = new DataColumn(column);
            datecolumn.AllowDBNull = true;
            csvDataTable.Columns.Add(datecolumn);
        }
        while (!csvReader.EndOfData)
        {
            string[] fieldData = csvReader.ReadFields();
            //Making empty value as null
            for (int i = 0; i < fieldData.Length; i++)
            {
                if (fieldData[i] == "")
                {
                    fieldData[i] = null;
                }
            }

            csvDataTable.Rows.Add(fieldData);
        }
    }

    return csvDataTable;
}
0
Shalom Dahan