auch wenn es noch nicht funktioniert stelle ich mal meinen ersten vollständigen Versuch zur OOP vor. Nach wie vor hoffe ich das ich nicht meilenweit am Ziel vorbei geschossen bin.
Das Programm soll bestimmte csv-Dateien aus einem (in einer ini-Datei) festgelegten Pfad auslesen, die Anführungszeichen in den Dateien löschen und sie wieder in einem anderen Pfad speichern. Ich hoffe das sollte für den Anfang vom Schwierigkeitsgrad her einfach genug sein.
Mein Ziel ist mich der OOP Schrittweise zu nähern, daher bitte ich euch keine komplette Überarbeitung zu posten. Ich versuche - sofern mir möglich - die Vorschläge nacheinander umzusetzen und natürlich zu verstehen.
Ich habe 3 Klassen: Program (Main); Settings (um die 2 Zeilen in der ini-Datei auszulesen); CsvChanger (suchen, lesen, verändern und schreiben der Dateien)
Der Code:
classProgram{staticvoidMain(string[] args){try{Settings settings1 =newSettings();
settings1.ReadFile("settings.ini");
settings1.GetSource();
settings1.GetDestination();CsvChanger changer =newCsvChanger();
changer.FindCsv(settings1.source);
changer.ReadCsv();
changer.ChangeCsv();
changer.WriteFiles(settings1.destination);Console.ReadKey();}catch{Console.WriteLine("Unknown error");}}}classSettings{private string iniText;public string source { get;set;}public string destination { get;set;}publicvoidReadFile(string iniFile){try{
iniText =File.ReadAllText(iniFile);}catch{Console.WriteLine("settings.ini not found");}}publicvoidGetSource(){try{Regex rsource =newRegex("(?<=Source\\=).+");Match msource = rsource.Match(iniText);
source =Convert.ToString(msource);}catch{Console.WriteLine("Could not find 'Source' in settings");}}publicvoidGetDestination(){try{Regex rdestination =newRegex("(?<=Destination\\=).+");Match mdestination = rdestination.Match(iniText);
destination =Convert.ToString(mdestination);}catch{Console.WriteLine("Could not find 'Destination' in settings");}}}classCsvChanger{private string[] changedContent;privateint fileCount;private string[] files;private string[] fileContent;//Settings settings2 = new Settings();
string source;
string destination;publicvoidFindCsv(string source){try{this.source = source;
files =Directory.GetFiles(source,"GAR_EXPORT_*.csv");
fileCount = files.Length;if(files == null){Environment.Exit(0);}}catch(Exception ex){Console.WriteLine("Error finding files");Console.WriteLine(Convert.ToString(ex));}}publicvoidReadCsv(){try{for(int x =1; x <= fileCount; x++){
fileContent[x]=File.ReadAllText(files[x]);}}catch{Console.WriteLine("Couldn't read CSV");}}publicvoidChangeCsv(){try{for(int x =1; x <= fileCount; x++){
changedContent[x]= fileContent[x].Replace("\"","");}}catch{Console.WriteLine("Couldn't replace file-content");}}publicvoidWriteFiles(string destination){try{this.destination = destination;for(int x =1; x <= fileCount; x++){using(StreamWriter sw =newStreamWriter(destination +Path.GetFileName(files[x]))){
sw.Write(changedContent[x]);}}}catch{Console.WriteLine("Error writing files to destination");}}}
Einen Vorschlag hatte ich schon bekommen: Die Get-Methoden haben kein return, allerdings sind sie trotzdem dafür da etwas auszulesen und in eine Variable zu speichern. Ich weiß nicht wie ich das sonst nennen soll^^
Ich mache nichts anders als sonst auch aber folgendes passiert:
msource hat genau das was ich möchte, in der Überwachung sieht es so aus:
msource = "C:\\Users\\ich\\desktop\\"
allerdings sobald ich in einen string convertiere sieht source dann so aus:
source = "C:\\Users\\ich\\desktop\\\r"
und ich bekomme die Meldung "ungültige Zeichen in Pfad" als Exception. Ich habe keine Ahnung wo dieses '\r' her kommt und warum es in all meinen vorherigen Programmen in denen ich Regex zum ini-Datei auslesen benutzt habe einwandfrei funktioniert hat. Hat da jemand eine Idee?
Frage
Tician
Moinsen,
auch wenn es noch nicht funktioniert stelle ich mal meinen ersten vollständigen Versuch zur OOP vor. Nach wie vor hoffe ich das ich nicht meilenweit am Ziel vorbei geschossen bin.
Das Programm soll bestimmte csv-Dateien aus einem (in einer ini-Datei) festgelegten Pfad auslesen, die Anführungszeichen in den Dateien löschen und sie wieder in einem anderen Pfad speichern. Ich hoffe das sollte für den Anfang vom Schwierigkeitsgrad her einfach genug sein.
Mein Ziel ist mich der OOP Schrittweise zu nähern, daher bitte ich euch keine komplette Überarbeitung zu posten. Ich versuche - sofern mir möglich - die Vorschläge nacheinander umzusetzen und natürlich zu verstehen.
Ich habe 3 Klassen: Program (Main); Settings (um die 2 Zeilen in der ini-Datei auszulesen); CsvChanger (suchen, lesen, verändern und schreiben der Dateien)
Der Code:
Einen Vorschlag hatte ich schon bekommen: Die Get-Methoden haben kein return, allerdings sind sie trotzdem dafür da etwas auszulesen und in eine Variable zu speichern. Ich weiß nicht wie ich das sonst nennen soll^^
Warum das Programm nicht funktioniert:
Ich mache nichts anders als sonst auch aber folgendes passiert:
msource hat genau das was ich möchte, in der Überwachung sieht es so aus:
msource = "C:\\Users\\ich\\desktop\\"
allerdings sobald ich in einen string convertiere sieht source dann so aus:
source = "C:\\Users\\ich\\desktop\\\r"
und ich bekomme die Meldung "ungültige Zeichen in Pfad" als Exception. Ich habe keine Ahnung wo dieses '\r' her kommt und warum es in all meinen vorherigen Programmen in denen ich Regex zum ini-Datei auslesen benutzt habe einwandfrei funktioniert hat. Hat da jemand eine Idee?
Bearbeitet von TicianLink zu diesem Kommentar
Auf anderen Seiten teilen
30 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.