2012-12-13 10 views
13

Witam wszystkich, mam plików CSV, które są w tym formacie:Jak mogę odczytać przesłany plik CSV bez zapisywania go na serwerze?

**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"|| 

muszę przeczytać te pliki bez zapisywania ich na serwerze. Czy ktoś może mi pomóc? Jak mogę odczytać te pliki i wstawić je do bazy danych? Jak mogę przyciąć znaki specjalne z plików?

To właśnie staram się robić na upload plików:

[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(); 
} 
+3

'StreamReader csvreader = nowy StreamReader (UploadedFile.InputStream); '? –

+0

W nawiązaniu do komentarza Mario: właściwość 'FileName' zwraca nazwę lub ścieżkę przesłanego pliku ** na kliencie **. Twój kod działa na serwerze i nie może bezpośrednio odczytać plików od klienta. –

+0

@RichardDeeming Jak używać delimeter do usuwania znaków specjalnych – SoftwareNerd

Odpowiedz

34

tylko przykładem, w jaki sposób można odczytać przesłanego pliku bez zapisywania go na serwerze:

// 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(';'); 
} 
+0

Czy nie byłoby lepiej mieć line.Split ('/ n'), ponieważ plik csv będzie używał przecinków do oddzielnych wartości i nowego wiersza '/ n' do oddzielnych linii ? – naz786

+1

No, no =) W tym przypadku 'line' jest już" linią "(' csvreader.ReadLine() 'da ci całą linię/wiersz i ma logikę identyfikującą koniec linii), a tym samym' linię .Split ('/ n') 'nie będzie działał, ani nie będzie char lub poprawnym C#. –

+0

Jeśli dla to StreamReader csvreader = nowy StreamReader (fileUpload.Postedfile.InputStream); – user2211290

Powiązane problemy