Autor Beitrag
epsodus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 20.02.14 13:44 
Hallo zusammen,

ich habe vor einiger Zeit angefangen C# zu lernen. Jetzt habe ich eine Konsolenanwendung geschrieben, mit der Hilfe eines Bekannten. Hierbei gab es auch Rückschläge aber der Lerneffekt war groß.
Leider habe ich mit Winforms ( Gui ) keine Erfahrung und versuche mir diese anzueignen. Aber manchmal ist man schwer von Begriff oder etwas dösig. Ich hoffe ihr könnt mir etwas helfen und ein paar Tipps zum Anfang geben. Ich weis nicht wie ich meine *.ini in eine Gui umsetzen soll.

Die Konsolenanwendung wird wie folgt aufgerufen :

"FileSearch.exe C:\etc\FileSearch.ini C:\ausgabe\FileSearch.txt" und folgendem Inhalt vonm FileSearch.ini

Filsearch.ini
ausblenden Quelltext
1:
2:
3:
4:
# Kommentar
path=C:\temp\
mask=*.csv
pattern=Suchmich


Die Anwendung wird mit dem obrigen Aufruf gestartet. Es wird in der Filesearch.ini der Parameter " path " zum Verzeichnis aufgerufern. Dieses Verzeichnis wird auf Dateien ( mask ) mit der Endung*.csv
durchsucht. Jede Datei mit dieser Endung wird auf das Suchwort ( pattern ) " Suchmich " durchsucht. Sobald eine Datei mit dem Suchwort gefunden wurde, wird diese in eine *.txt Datei ( filesearch.txt )
geschrieben ( nur der Dateiname ) .

Dies würde ich gerne in eine C# Gui umsetzen. Anbei ein Bild meiner Gui und der Sourcecode von der Konsolenanwendung.

Ich hoffe auf ein paar Denkanstösse, ich möchte nur etwas Hilfe und keinen completten Code. Vielen Dank

Sourcecode :
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.IO;

namespace FileSearch
{
    class Program
    {
        static int Main(string[] args)
        {
            string mask = "*.csv";
            string pattern = "SUCHTEXT";
            string sourcePath = @"C:\temp\";

            FileStream fs;
            StreamReader reader;
            string config;

            if (args.Length < 2)
            {
                Console.WriteLine("usage: FileSearch file.ini output.txt");
                return 1;
            }

            try {
                fs = File.Open(args[0], FileMode.Open, FileAccess.Read, FileShare.Read);
                reader = new StreamReader(fs);
                config = reader.ReadToEnd();
                reader.Close();
            }
            catch (Exception) {
                Console.WriteLine("Could not read %s", args[0]);
                return 2;
            }

            if (config.Length > 0)
            {
                string[] lines = config.Split(new char[] { '\n' });
                Dictionary<stringstring> mysettings = new Dictionary<stringstring>();
                foreach (string line in lines)
                {
                    if (! line.StartsWith("#"))
                    {
                        int i = line.IndexOf('=');
                        if (i >= 0)
                        {
                            mysettings.Add( line.Substring(0,i).Trim() , line.Substring(i+1).Trim());
                        }
                    }
                }

                sourcePath = mysettings["path"];
                mask = mysettings["mask"];
                pattern = mysettings["pattern"];
            }

            var matches = Directory.GetFiles(sourcePath, mask, SearchOption.TopDirectoryOnly);
            string destFile = args[1];

            StreamWriter txt;
            try
            {
                txt = new StreamWriter(File.Open(destFile, FileMode.Create, FileAccess.Write, FileShare.None));
            }
            catch (Exception)
            {
                Console.WriteLine("Could not write %s", destFile);
                return 5;
            }

            foreach (string file in matches)
            {
                string fileName = Path.GetFileName(file);
                StreamReader csv;
                try
                {
                    csv = new StreamReader(File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read));
                }
                catch (Exception)
                {
                    Console.WriteLine("Could not open %s", file);
                    return 6;
                }

                while (csv.Peek() >= 0)
                {
                    string line = csv.ReadLine();
                    if (line.IndexOf(pattern) >= 0)
                    {
                        txt.WriteLine(fileName);
                        break;
                    }
                }

                csv.Close();
            }

            txt.Close();

            return 0;
        }
    }
}


Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von epsodus am Do 20.02.14 14:23, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 20.02.14 14:05 
Hallo und :welcome:

was genau ist denn deine Frage, d.h. woran hängst du?

Als Tipp kann ich dir als erstes geben, daß du dein Konsolenprogramm soweit umprogrammieren solltest, daß du Ein-/Ausgabe (Console) und Logik voneinander trennst (d.h. am besten eine eigene Klasse für die Logikfunktionen erzeugen).
Danach kannst du dann ein WinForms-Projekt anlegen und diese Klasse (bzw. die betreffende Datei) dann dem Projekt hinzufügen und in der Form-Klasse dann die Zugriffe darauf durchführen.

Wenn du jedoch noch keine Erfahrung mit WinForms hast, so solltest du erst einmal ein Testprojekt anlegen, um die grundsätzlichen Controls (wie Buttons, TextBox, ListBox etc.) kennenzulernen und besonders deren Ereignisse (Events), denn dies ist der Hauptunterschied zu einem Konsolenprogramm.
Du mußt dich bei WinForms von der "oben-nach-unten"-Denkweise lösen und ereignisorientiert programmieren (und denken)!
epsodus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 20.02.14 14:11 
Hallo,

ich zitiere " Du mußt dich bei WinForms von der "oben-nach-unten"-Denkweise lösen und ereignisorientiert programmieren (und denken) " .

Da liegt wohl mein Problem. Ich versuche gerade die Abfrage der *.ini in Textboxen umzusetzen. Mal sehen was dort rauskommt.
Besser ich fange damit an :

" Ein-/Ausgabe (Console) und Logik voneinander trennst (d.h. am besten eine eigene Klasse für die Logikfunktionen erzeugen). "

Mal schauen wie ich das umgesetzt bekomme. Ich arbeite wohl zu unstrukturiert.

Danke für den Tip
epsodus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 20.02.14 18:05 
Hallo,

sitze hier grüble, im Moment sehe ich den Wald vor lauter Bäumen nicht.
Kann mal jemand für mich hier den Anfang machen? Wie könnte ich die Anwendung als Gui umsetzetn ?

Mfg.
Volker
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 20.02.14 18:16 
Wo kommst Du denn nicht weiter?

Die Komponenten, die Du brauchst, sind:
  • GroupBox
  • Label
  • TextBox
  • Button
  • CheckBox
  • StatusStrip

Das Zusammenklicken ist dann nicht weiter schwer :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
epsodus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Do 20.02.14 20:20 
Hi,

1. Ich muss den Pfad ( Verzeichnis ) auswählen.

2. Die Dateiendung der zu durchsuchenden Datei vorgeben.

3. Das Entscheidungkriterium ( Suchwort ) angeben

4. Pfad und Namen für die Auslagerungsdatei angeben.

5. Startbutton

sehe ich das richtig ?

Ich muss jetzt mal klein anfangen und mal schauen wofür alle Komponenten da sind. Muss total umdenken.
Troubadix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 28
Erhaltene Danke: 9

WIN 7
C# (VS2010 Express)
BeitragVerfasst: Sa 22.02.14 15:10 
Hallo epsodus.

Als erstes möchte ich dir empfehlen ein Grundlagenbuch durchzuarbeiten. Da gibt es sogar kostenlose E-Books im Netz. Da würde Dir nämlich schnell klar wo du lang must.

Nun zu Deinem Ansatz:
Jedes Control auf deiner Form kann verschiedene Ereignisse auslösen auf die du im Code reagieren kannst. In deinem Falle interessiert dich das Ereignis "Click" von deinem startbutton.
Mach mal im Designer einen Doppelclick auf den Startbutton. Der Designer legt dan nämlich automatisch das Abonement für das Ereignis Click und eine leere Behandlungsmethode an. Da drin kannst Du jetzt die Inhalte der Textboxen auswerten und deine Suche starten.

Ich hoffe das bringt dich auf die richtige Fährte.

Gruß
Troubadix
epsodus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Di 25.02.14 12:30 
Hallo,

vielen vielen Dank für die Antworten. Bin leider am Freitag ins Krankenhaus gekommen und gerade wieder Zuhause. Ein Grundlagenbuch wurde schon bestellt und geliefert.
Ich werde mich jetzt mal Schritt für Schritt rantasten und ein Zwischergebnis einstellen. Hoffe dann auf rege Kritik und Verbesserungshinweisen.


MfG.

Volker
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 25.02.14 12:49 
Hallo epsodus,

für WinForms könntest du auch das kostenlose OpenBook Visual C# 2008 verwenden (die neuere Version 2012 verwendet schon WPF anstatt WinForms), besonders ab Kapitel 13 "Grundlagen zum Erstellen einer Windows-Anwendung".
Unter Galileo Computing – <openbook> kannst du auch dieses Buch als PDF-Dokument runterladen.