Zum Inhalt springen

Tician

Mitglieder
  • Gesamte Inhalte

    541
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    9

Beiträge von Tician

  1. Verstehe ich das richtig, ich muss um die Source aus der ini-Datei zu bekommen eine Methode machen und brauche für die Rückgabe nochmal eine Methode?

    Ne die Variable müsste über get und set ja schon selbst etwas haben... ich bin verwirrt. Wie setze ich denn die source-variable nachdem ich die ini-Datei ausgelesen habe?

  2. 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:

    class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Settings settings1 = new Settings();
                    settings1.ReadFile("settings.ini");
                    settings1.GetSource();
                    settings1.GetDestination();
    
                    CsvChanger changer = new CsvChanger();
                    changer.FindCsv(settings1.source);
                    changer.ReadCsv();
                    changer.ChangeCsv();
                    changer.WriteFiles(settings1.destination);
    
                    Console.ReadKey();
                }
                catch
                {
                    Console.WriteLine("Unknown error");
                }
            }
        }
    
    
        class Settings
        {
            private string iniText;
            public string source { get; set; }
            public string destination { get; set; }
    
            public void ReadFile(string iniFile)
            {
                try
                {
                    iniText = File.ReadAllText(iniFile);
                }
                catch
                {
                    Console.WriteLine("settings.ini not found");
                }           
            }
            public void GetSource()
            {
                try
                {
                    Regex rsource = new Regex("(?<=Source\\=).+");
                    Match msource = rsource.Match(iniText);
                    source = Convert.ToString(msource);
                }
                catch
                {
                    Console.WriteLine("Could not find 'Source' in settings");
                }            
            }
            public void GetDestination()
            {
                try
                {
                    Regex rdestination = new Regex("(?<=Destination\\=).+");
                    Match mdestination = rdestination.Match(iniText);
                    destination = Convert.ToString(mdestination);
                }
                catch
                {
                    Console.WriteLine("Could not find 'Destination' in settings");
                }
            }
        }
    
    
    
        class CsvChanger
        {
            private string[] changedContent;
            private int fileCount;
            private string[] files;
            private string[] fileContent;
            //Settings settings2 = new Settings();
            string source;
            string destination;
    
            public void FindCsv(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));
                }
            }
    
            public void ReadCsv()
            {
                try
                {
                    for (int x = 1; x <= fileCount; x++)
                    {
                        fileContent[x] = File.ReadAllText(files[x]);
                    }
                }
                catch
                {
                    Console.WriteLine("Couldn't read CSV");
                }
            }
    
            public void ChangeCsv()
            {
                try
                {
                    for (int x = 1; x <= fileCount; x++)
                    {
                        changedContent[x] = fileContent[x].Replace("\"", "");
                    }
                }
                catch
                {
                    Console.WriteLine("Couldn't replace file-content");
                }
            }
    
            public void WriteFiles(string destination)
            {
                try
                {
                    this.destination = destination;
                    for (int x = 1; x <= fileCount; x++)
                    {
                        using (StreamWriter sw = new StreamWriter(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^^

    Warum das Programm nicht funktioniert:

                try
                {
                    Regex rsource = new Regex("(?<=Source\\=).+");
                    Match msource = rsource.Match(iniText);
                    source = Convert.ToString(msource);
                }

    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?

  3. Mein Lehrer konnte mein Problem identifizieren. Ich hab in meiner Klasse C ein neues Objekt der Klasse B angelegt und das kannte natürlich das "source" nicht mehr das ich in Klasse A zugewiesen habe.

    Mein Spaghetti-Code-Programm muss heute fertig werden, danach kann ich mich wieder um das neue Projekt mit der OOP kümmern.

     

  4. Ich dachte ich hätte es verstanden... irgendwie nicht:(

    Wenn ich folgendes habe:

    class A (Main)
    {
       	B.GetSource
         C.DoSomething
    }
    
    class B
    {
    public string source {get;set;}
    public void GetSource
    	{
    	//blabla
    	source = //blabla
    	}
    }
    
    class C
    {
    public void DoSomething
    	{
      	string file = Directory.GetFiles(B.source, "*.csv");
    	}
    }

    Ich dachte das würde so funktionieren, aber ich bekomme nur ein "ArgumentNullException" das sich auf "source" bezieht.

    Wenn ich Schritt für Schritt durchgehe bekommt source einen Wert, aber sobald es zu Class C kommt ist der nicht mehr vorhanden. Was mache ich falsch? :unsure:

  5. Also ich hab wieder ein neues Projekt aber das werde ich erst für Verbesserungsvorschläge freigeben wenn es fertig ist <_<

    Jetzt habe ich gerade aber eine Frage:

    Wann benutze ich das:

    Class B
    {
    A.Nummer = 15;
    A.TuEtwas();
    }
    
    Class A
    {
    int Nummer {get;set;}
    public void TuEtwas()
    {
    //mach etwas mit Nummer 
    }

    und wann das:

    Class B
    {
    int nummer = 15;
    A.TuEtwas(nummer)
    }
    
    Class A
    {
    //int nummer;
    public void TuEtwas(int nummer)
    {
    this.nummer = nummer;
      //Tu etwas mit nummer
    }
    }

    Beides schiebt - sofern ich das verstanden habe - den Inhalt einer Variable von einer Klasse in die andere. Bei ersterem einfach nur rein die Variable und bei zweiterem zur direkten Verwendung in einer Methode.

    Kann ich also sagen wenn ich eine Variable in mehreren Methoden brauche dann benutze ich ersteres und wenn ich es nur für eine methode brauche zweiteres?

  6. Meine Erfahrung:

    kleine Betriebe zahlen oft weniger bis gut, haben keine Zeiterfassung (heißt viele unbezahlte Überstunden) allerdings gibt es durch die sehr breit gefächerten Aufgaben viel zu lernen.

    Große Betriebe zahlen oft mehr, haben eine Zeiterfassung, allerdings beschränkt sich der Aufgabenbereich darauf die eigene Firma zu betreuen.

    Diese Erfahrung beruht auf dem was Klassenkameraden erzählen und den 2 Betrieben in denen ich schon war.

    Also je nachdem was dir liegt. Ansonsten sollte es natürlich vom menschlichen her passen.

  7. Moinsen,

    ich geh gerade so langsam die Zwischenprüfungen durch und an einer Aufgabe hänge ich gerade in der meine Lösung nicht dem entspricht was auf das Papier gekritzelt wurde und ich weiß nicht welche Lösung stimmt.

    Die Aufgabe:

    1800 Kameras nehmen Bilder mit einem Datenstrom von 6 MBit/s auf. Die Daten werden 1:15 komprimiert und für 10 Minuten auf eine Festplatte gespeichert.

    Berechnen Sie den erforderlichen Speicherplatz in Gbyte.

    Meine Lösung:

    6 Mbit/s * 60 (für eine Minute) * 10 (für 10 Minuten) = 3600 Mbit pro Kamera in 10 Minuten

    3600 * 1800 (für alle Kameras) / 15 (komprimierung) = 432000 Mbit

    432000 / 8 = 54000 Mbyte = 54 GByte

    Andere Lösung:

    6Mbit/s /15 = 400 kbit/s pro Kamera

    400 * 10 * 60 = 240 Mbit pro Kamera in 10 Minuten

    240 * 1800 = 432000 MB

    Hier wurde gar nicht von bit auf byte umgerechnet. Wir hatten solche Aufgaben noch nie in der Schule, muss man das nicht, habe ich was verpasst?

    Was ist die Lösung?

     

    Edit: Als Hinweis wird angegeben:

    1Gbyte = 1024³ Byte

    Selbst das verwirrt mich schon

  8. Hi @CAEYO

    Da du vermutlich recht neu bist würde ich behaupten du hast eine Sache verpasst: Ich mach eine Ausbildung zur FISI (apropo ich bin weiblich Whiz_zard). Mein Ausbilder ist ein Crack was Pearl angeht und in etwa kann er meinen Code auch verstehen, aber wenn es ums eingemachte geht kann er mir nicht weiterhelfen, er weiß auch nur noch das was er vor ~10 Jahren in der Schule gelernt hat. Und mehr Informatiker sind wir hier nicht im Betrieb^^

    Da ich zu den etwas älteren (26) in der Klasse gehöre bin ich etwas reifer, ich würde es richtig cool finden jemanden zu haben der IRGENDETWAS mit mir machen würde (Programmieren, Server aufsetzen, vernetzen, irgendwas halt) weil es zusammen mit anderen natürlich viel mehr Spaß macht. Die Zwischenprüfungen stehen an, ich frage herum ob jemand nachmittags bleiben möchte um gemeinsam alte Prüfungen durchzugehen, ich biete an zusammen auf Klassenarbeiten zu lernen aber keiner scheint so "hyped" zu sein wie ich - nicht einmal aus dem engeren Freundeskreis in der Schule.

    Ich habe andere Prioritäten wie meine Mitschüler, wenn der Lehrer uns früher gehen lässt heißt es bei anderen "Juhu Freizeit", bei mir ist es eher ein "wir sind doch schon hinterher, wie soll ich so auf die Prüfung vorbereitet werden?"

    Ich habe ein Buch in englisch (Head First C#) und habe es auch angefangen durchzuarbeiten aber nachdem ich in gleich am Anfang mit WPF konfrontiert wurde und ums verrecken nichts gefunden habe was mir sagt wie ich eine falsch platzierte Linie in meinem Grid (Gitter) wieder löschen kann war mir nicht mehr danach :angry:

    Ich werde es bei Zeiten nochmal versuchen.

  9. Ich kann den Lehrer nur verteidigen, im Prinzip würde ich es der Schule in die Schuhe schieben weil sie keinen Lehrer für das 1. Lehrjahr gefunden haben.

    Der Mensch ist kein Lehrer, war es nie und hat vermutlich auch nie ausgebildet oder unterrichtet. Er programmiert und hat schätzungsweise versucht das was im Lehrplan steht irgendwie in diese (PVoss liegt richtig) 4 Schulstunden alle 2 Wochen unterzubringen.

    Jetzt im 2. Lehrjahr ist es so das wir beim neuen Lehrer auch nur die Themen durchrennen. UML, Struktogramme, State Chart, Vererbung, OOP

    Dieses Jahr habe ich erst verstanden was es überhaupt mit dem Konstruktor auf sich hat. Vererbung wurde auch mal kurz angeschnitten als wir unser Programm gemacht haben bei dem die Buttons auf der Form rumspringen.

    Klassenarbeit war dieses Jahr gar nichts mit eigenem Programmieren dabei, wir haben ein paar (halb)fertige Programme (Sudoku, bewegende System.Draw-Kreise) vor die Nase geklatscht bekommen und sollten diese entweder durch Verbesserung der Fehler zum laufen bringen oder etwas dazu programmieren/verändern. Das Ergebnis werden wir am Donnerstag erfahren, der Lehrer ist nicht bekannt dafür die schwächeren Schüler "mitzunehmen". Es waren einige Dinge dabei die ich nie gewusst hätte wenn ich nicht selbst mit z.B. dem Paint-Event letztes Jahr experimentiert hätte und nicht wüsste was das rießegroße rote X auf der Form ist. Ein Paint-Event das gegen die Wand rennt schmeißt (habe ich zumindest irgendwie in Erinnerung) kein Exception, stattdessen sieht man dieses rote Kreuz. Das wusste keiner.

    Ich behaupte mal frech das von dieser Gruppe aus zusammengewürfelten (1) FIAE und (15) FISI aus 3 verschiedenen Klassen ich noch unter den Top 3-4 bin.

    Vielleicht bin ich einfach in der falschen FI-Richtung gelandet, aber ich liebe meinen Betrieb und hauptsächlich wird eben ein Admin hier gebraucht und kein Programmierer (es sei denn ich könnte eine Logistik-Software selbst auf die Beine stellen - hell no)

    Ich versuche soviel wie möglich hier mit zu nehmen, ich weiß es ist schwierig über ein Forum zu lernen aber bisher wurde mir immer gut geholfen und ich hoffe das ich mit Geduld und Erfahrung auch irgendwann Code schreibe bei dem euch nicht die Augen aus dem Kopf fallen :)

  10. Naja so haben wir es gelernt... unser Lehrer im ersten Lehrjahr war Java-Programmierer, die Schüler fanden ihn gut aber er war eben nur ein Jahr lang da und das ist was wir beigebracht bekommen haben.

    http://wierbicki.de/programmierung-c/

    Der Lehrer selbst musste sich in C# einarbeiten. Das sind unsere Materialien aus dem ersten Lehrjahr nur mittlerweile habe ich so angst zu hören "Habt ihr doch gelernt" und ich kann es einfach nicht anwenden. :unsure:

    Das mit dem Datentyp im Namen als Konvention für den Unterricht und Klassenarbeiten konnten wir ihm ausreden, fanden wir auch nicht so dolle - und wie du siehst mache ich es ja auch nicht.

    Der Rest mit den typischen Fehlern war für komplette Anfänger sehr hilfreich, in Klassenarbeiten mussten wir Fehler in vorgefertigtem Code finden (auf dem Blatt Papier natürlich). Klammern die gefehlt haben, Semikolon die vergessen wurden, Anführungszeichen bei strings und vieles mehr.

    Zurück zum Thema: Wenn ich Getter und Setter explizit schreibe dann rufe ich es wie eine Methode auf? Du hast ja oben slebst ein Beispiel gezeigt wie der Compiler es übersetzen würde, das sieht mir jetzt wie das aus was wir gelernt haben - oder? Im Prinzip werden ich zukünftig wohl sowieso nur noch mit dem {get; set} arbeiten schätze ich.

  11. Oh praktisch mit dem Format! Das neue mit der Interpolation gefällt mir sogar noch besser!

    Das Getter und Setter nicht wie normale Methoden aufgerufen werden muss ich mir merken... das verwirrt mich gerade weil ich es anders gefunden habe. Ist das vielleicht ein Unterschied wie ich die Eigenschaften schreibe? Oder was ist der Unterschied zu dem was hier steht? http://wierbicki.de/wp-content/uploads/2016/02/2016-01-20-SAEL-E1FI2-Datenfelder-Getter-Setter.pdf

    mensch1.SetName("Ich");

    anstatt

    mensch1.name = "Ich";

  12. Ich denke ich habe es soweit verstanden, aber wie ich das dann in einer anderen Klasse benutze, also mit set einen Wert übergeben und dann mit get wiederbekomme ist mir ein Rätsel. Würde es dann in Klasse B so aussehen?

    class B
    {
        A.set_Nummer(15);
    
        int zahl = A.get_Nummer();
        Console.WriteLine("Meine Zahl ist " + zahl);
      
      	//bzw kürzer wahrscheinlich so oder ähnlich?
      	Console.WriteLine("Meine Zahl ist " + A.get_Nummer())
    }

    Was anderes:

    Console.WriteLine("Nummer gesetzt auf {0}", value)

    Ich habe das schon öfter gesehen aber warum benutzt man das? Warum nicht so:

    Console.WriteLine("Nummer gesetzt auf " + value)

    Was machen die geschweiften Klammern mit der null da?

  13. Ich verstehe dich nicht.

    Ich kann programmieren, ob es gut ist ist eine andere Frage.

    Du sagst keiner macht am Anfang perfekten Code und ich soll es mit der OOP einfach versuchen - aber du scheinst perfekten Code zu erwarten. Jetzt versuche ich es, du willst das ich es unbedingt ganz genauso mache wie du es willst und es dir vorstellst und wenn ich sage "das ist mir zu schwer" weil du zwangzig verschiedene Dinge benutzt von denen ich noch nie in meinem Leben gehört habe, die ich noch nie gesehen habe dann scheinst du beleidigt zu sein (so kommt es rüber) und erzählst mir "lern programmieren".

    Du hast so viel Wissen und du versuchst es weiter zu geben - allerdings alles auf einmal. Mein erster Versuch war da - und die Rückmeldung "nicht in den Konstruktor, mach stattdessen Methoden daraus" kam bei mir an. Also war mein nächstes Vorhaben meine Klasse zum Dateien einlesen in ein paar Methoden aufzuspalten...

    Das Projekt läuft, mir ist absolut die Lust daran vergangen irgendwas zu optimieren oder umzustellen, die anfängliche Freude ist weg, stattdessen würde ich am liebsten einfach heulen. Ich lass das jetzt ruhen und versuch es mit dem nächsten Projekt besser zu machen.

  14. Das war doch nur ein Beispiel was in der Datei drin steht (und ich entziffern kann), da stehen Abkürzungen in dem Header mit denen ich nichts anfangen kann. Lass mich erstmal meine erste Klasse fertig machen und herumprobieren wie ich Variablen rumschieben kann, ich wäre ja schon froh das zu verstehen, du weißt gar nichts wie frustrierend das ist wenn man sich vornimmt das kleine 1x1 zu lernen und jemand anderes aber gleich in einen Rechenbereich mit 20 nullen hinter der Zahl vordringen möchte.

    Ich kann das Programm nicht mehr sehen und wenn das irgendwie mit Hilfe von Klassen und Methoden tut bin ich doch schon glücklich und kann es mit dem nächsten Programm gleich so anfangen - und dann wieder einen Schritt weiter gehen mit der Verbesserung.

    Und ich möchte nicht noch mehr Preis geben und mir dadurch ärger einhandeln...

  15. Ich nehme den Ratschlag an das ich erstmal Methoden mache statt alles in den Kontruktor zu kloppen, wenn ich dann den Austausch von Daten zwischen Klassen, Methoden und weißnichtwas hin kriege bin ich schon glücklich...

    Der Rest muss folgen wenn das Programm auf diese Weise wieder fehlerfrei funktioniert, dann würde ich mich trauen noch einmal umzubauen. Ich brauch einen Zwischenschritt.

    Edit: Es fängt schon an mit dem Problem das ich gar nicht weiß nach was ich meine CSV benennen kann, anders als bei einer Datenbank habe ich nichts das eine Zeile eindeutig identifiziert, es gibt keine durchnummerierung oder sowas, ich hab Zeilen doppelt oder dreifach

  16. @Whiz-zarD Du hast dir so viel Mühe gegeben und ich hab mir das jetzt 4 mal durchgelesen, das ist so mega viel das ich gar nichts mehr verstehe (du wolltest es wahrscheinlich gleich perfekt haben?), wenn ich das übernehme hätte ich auch ein Programm in C oder sowas abschreiben können. Es ist nicht mehr meines, ich verstehe gar nicht was da vorgeht und ohne tausend Kommentare geht da nix.

    War mein eigenes Vorgehen denn so falsch? Ich hatte vor das beizubehalten, aber aus der Klasse vielleicht ein "CsvDatei" zu machen mit evtl Methoden "Einlesen", "Aufspalten" irgendwie sowas... mich verlässt gerade ziemlich schnell die Motivation und der Mut :(

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...