kariya
Goto Top

Header in csv einfügen

Ich habe ein Programm, welches Daten aus einer csv abgleicht und unter bestimmten Bedingungen in eine neue csv einfügt.
Leider bekomme ich es nicht hin, dass der neuen csv ein Header geschrieben wird.
Der Quellcode sieht wie folgt aus:

 using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;

namespace CsvMerge
{
	public static class Program
	{
		public static void Main()
		{
            // ignorierte Artikelnummer holen
            string filteredArticles = File.ReadAllLines("Artikelfilter.txt",Encoding.Default);  

			// alle verfügbaren (Bild-)Dateien vom FTP-Server holen
			List<string> availableImages = Program.GetFtpFiles().ToList();

			// die Zeilen aus allen CSV-Dateien laden
			IEnumerable<List<string>> allCsvRows = Program.GetCsvRows();

			// alle Zeilen durchlaufen und der Ergebnisliste hinzufügen, wenn es ein Bild zum Artikel gibt
			List<List<string>> result = new List<List<string>>();
            foreach (List<string> row in allCsvRows)
            {
                string artikelNr = row[1];
                if (availableImages.Contains(artikelNr + ".jpg", StringComparer.InvariantCultureIgnoreCase))  
                    row[21] = "http://coxx.it/pictures/" + artikelNr + ".jpg";  

                // nur Zeilen übernehmen mit Bild und nicht rausgefilterten Artikelnummern
                if (!String.IsNullOrEmpty(row[21]) && !filteredArticles.Contains(artikelNr))
                    result.Add(row);
            }

			// wieder CSV-Zeilen erstellen
			string resultLines = result
				.Select(cells => String.Join(";",cells.Select(value => "\"" + value.Replace("\"","\\\"") + "\"").ToArray()))  
				.ToArray();

			// CSV-Datei erstellen
			string fileName = "merged.csv";  
			File.Delete(fileName);
			File.WriteAllLines(fileName,resultLines,Encoding.Default);

			// CSV-Datei hochladen
			WebClient webClient = new WebClient();
			webClient.Credentials = new NetworkCredential("Login1","Password");  
			webClient.UploadFile("FTP-Server"+fileName,fileName);  
		}


		private static IEnumerable<string> GetFtpFiles()
		{
			WebRequest webRequest = WebRequest.Create("FTP-Server");  
			webRequest.Credentials = new NetworkCredential("Login2","Password");  
			webRequest.Method = WebRequestMethods.Ftp.ListDirectory;

			using (WebResponse webResponse = webRequest.GetResponse())
			using (Stream responseStream = webResponse.GetResponseStream())
			using (StreamReader streamReader = new StreamReader(responseStream))
				while (!streamReader.EndOfStream)
					yield return streamReader.ReadLine();
		}


		private static IEnumerable<List<string>> GetCsvRows()
		{
			foreach (string file in Directory.GetFiles(@"E:\FTP","*.csv"))  
			{
				string content = File.ReadAllLines(file,Encoding.Default);
				foreach (string line in content)
					yield return Regex.Matches(line,@"""(?<cell>.*?)(?<!\\)"",?").Cast<Match>().Select(match => match.Groups["cell"].Value).ToList();  
			}
		}
	}
}

Content-ID: 196272

Url: https://administrator.de/contentid/196272

Ausgedruckt am: 26.11.2024 um 12:11 Uhr

nxclass
nxclass 28.12.2012 um 15:13:45 Uhr
Goto Top
Bin kein C Entwickler - aber CSV Dateien sind simple Textdateien OHNE Encoding. Wenn Du nun Daten exportieren/importieren willst musst Du in der Spec festlegen welches Encoding die CSV Daten haben sollen.