Autor Beitrag
sepp_a_u
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Do 04.10.07 22:54 
hi @ all

ich habe ein programm geschrieben, bei welchem der user seine daten eingibt (telfon, name, vorname, geb, usw usf.)
diese daten werden dann in einer txt - datei abgespeichert. jedoch habe ich das problem, dass da noch keine struktur drin ist und daher beim auslesen der daten genauso wenig eine struktur drin ist! hier mal der code:

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:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace telefonbuch
{
    class Program
    {
        static void Main(string[] args)
        {
            Menue();            
        }
        static void WriteFile()
        {
            StreamWriter schreiben = new StreamWriter(@"test.txt"true);
            schreiben.Write(Console.ReadLine());
            schreiben.Close();            
        }
        static void ReadFile()
        {
            StreamReader lesen = new StreamReader("test.txt");
            while (!lesen.EndOfStream)
            {
                Console.WriteLine(lesen.ReadLine());                               
            }
            lesen.Close();
            Console.ReadLine();
        }        
        static void Menue()
        {     
            bool Ende = true;
            string[] neueAdresse = new string[7];
            neueAdresse[0] = "Name";
            neueAdresse[1] = "Vorname";
            neueAdresse[2] = "Strasse";
            neueAdresse[3] = "Plz";
            neueAdresse[4] = "Ort";
            neueAdresse[5] = "Telefonnr.";
            neueAdresse[6] = "Geburtstag";
            string eingabe;        
            Console.WriteLine("\n\n\t \t      Was möchtest du tun? \n\n \t \t -----------------------------");
            Console.Write("\n \t \t |#############################|");
            Console.Write("\n \t \t |# N - Neue Adresse eingeben #| \n \t"); 
            Console.Write("\t |# A - Datensätze anzeigen   #| \n \t \t |# B - Beenden               #|" );              
            Console.Write("\n \t \t |#############################|");
            Console.WriteLine("\n \t \t -----------------------------");            
            
            do
            {
              switch (eingabe = Console.ReadLine().ToUpper())
              {
                case "N":                  
                    foreach (string adressen in neueAdresse)
                    {
                      Console.Write("{0}: ",adressen);
                        WriteFile();                        
                    }         
                    Menue();       
                    break;
                  
                case "A":           
                    ReadFile();                    
                    Menue();               
                    break;
                  
                case "B":
                  Ende = true;
                  break;   
                default:
                  Console.WriteLine("Fehlerhafte Eingabe!");
                  Menue();
                  break;
              }
            } while (!Ende);                     
        }

    }
}


wie kann ich jetzt eine struktur (ne art tabelle, wo oben der spaltenbezeichner wie zb name, vorname steht) hinbekommen? ihr könnt das prog ja mal compilieren und seht, dass die speicherung und das ansehen der gespeicherten daten absolut *mist*e aussieht. also: wie bekomme ich strutktur dahinter? hat vll wer ein konkretes bsp?

mfg

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Fr 05.10.07 21:14 
hmm weiß demnach also keiner, wie man die aus-eingabe schön formatieren kann? schade :(
falls es jedoch noch wem einfällt bitte posten ;)

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

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 05.10.07 21:17 
Schau Dir mal die String.Format-Funktion an und lies Dir die Doku bezüglich der dort verwendeten Format-Strings durch. Ziemlich weit am Anfang steht IIRC was dazu.

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

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 10:06 
hmm...aber da kann man doch keine tabellenform hertellen oder? hab ich es nur übersehen? also ich habe nur gesehen, wie man datum usw schön formatieren kann, aber das bringt mir leider nichts :( will ja ne shcöne tabellen form, wo dann unter "name" die ganzen namen stehen und unter "vorname" die ganzen vornamen usw usf.
wäre dankbar für nen link oder so

mfg
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 06.10.07 11:06 
Da hast du aber etwas übersehen, nämlich die "Alignment"-Angabe (oder wie das auch immer im deutschen SDK genannt werden mag): "{0,10}" fügt den ersten Parameter ein und füllt mit so vielen Leerzeichen auf, dass die Gesamtlänge 10 beträgt.
Du musst dir aber erst einmal überlegen, ob deine Tabelle eine statische oder dynamische Breite haben soll. In ersterem Falle kannst du direkt eine Konstante wie oben angeben, ansonsten müsstest du eben für jede Spalte zuerst die längste Zelle finden und diese Breite als Alignment benutzen.
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 11:17 
danke mal...

bei meiner tabelle ist jede spalte 14 zeichen lang. wie mache ich es nun, dass jeder name immer in der spalte steht, den man eingibt? denn der name kann ja mal 10 zeichen lang sein, mal kann er nur 5 zeichen lang sein. dann verschiebt sich das ganze ja leider wieder.
wie muss ich es mit dem alignment machen, damit die spalte, egal wie lang der name ist, immer 14 zeichen lang ist?

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

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 06.10.07 11:19 
Khabarakh hat folgendes geschrieben:
"{0,10}" fügt den ersten Parameter ein und füllt mit so vielen Leerzeichen auf, dass die Gesamtlänge 10 beträgt.
:roll:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 06.10.07 11:22 
user profile iconsepp_a_u hat folgendes geschrieben:

wie muss ich es mit dem alignment machen, damit die spalte, egal wie lang der name ist, immer 14 zeichen lang ist?

Willst Du nicht lesen, oder kannst Du nicht lesen?
user profile iconKhabarakh hat folgendes geschrieben:
Da hast du aber etwas übersehen, nämlich die "Alignment"-Angabe (oder wie das auch immer im deutschen SDK genannt werden mag): "{0,10}" fügt den ersten Parameter ein und füllt mit so vielen Leerzeichen auf, dass die Gesamtlänge 10 beträgt.

Ich glaube, Du willst nicht lesen; Du bist schließlich schon mehrfach darauf hingewiesen, die Forumsregeln zu beachten. Jürgen

PS. Nicht schnell genug...
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 11:31 
hmm die frage ist jetzt, wie ich das anstelle?

ich denke ich wrde es hier einfügen müssen oder:
ausblenden C#-Quelltext
1:
2:
3:
StreamWriter schreiben = new StreamWriter(@"telebuch.txt"true);
            schreiben.Write(Console.ReadLine());
            schreiben.Close();


jedoch wird dann immernoch nicht gut formatiert. es klappt dann immernoch nicht mit der tabellenausgabe :( :

ausblenden C#-Quelltext
1:
2:
3:
StreamWriter schreiben = new StreamWriter(@"telebuch.txt"true);
            schreiben.Write("{0,14}",Console.ReadLine());
            schreiben.Close();


weiß wer, wie ich es machen muss? bzw ob die stelle überhaupt stimmt in dem code? vll muss ich ihn ja wo anders einfügen?
der ganze quelltext ist ja drin. vll kann mir wer sagen, worein damit..

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

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 06.10.07 11:52 
Was soll diese Methode denn überhaupt machen? Du liest eine Zeile Benutzereingabe und willst die dann an eine Datei anhängen? Das klingt nicht sehr sinnvoll. :gruebel:

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

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 16:15 
user profile iconChristian S. hat folgendes geschrieben:
Was soll diese Methode denn überhaupt machen? Du liest eine Zeile Benutzereingabe und willst die dann an eine Datei anhängen? Das klingt nicht sehr sinnvoll. :gruebel:


ich will die benutzereingabe speichern ja. ist ja quasi ein telefonbuch. die daten werden abgespeichert. teste den code doch einmal. wie sollte ich es denn sonst machen, dass die daten gespeichert wrden? damit sie immernoch beim nächsten programmstart vorhanden sind?

mfg
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Sa 06.10.07 16:27 
Wenn du Tabellenform haben willst musst du entweder eine Datenbank benutzen oder eine CSV-Datei. Frage mich aber nicht wie du die anlegst.
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 16:33 
user profile iconLeuchtturm hat folgendes geschrieben:
Wenn du Tabellenform haben willst musst du entweder eine Datenbank benutzen oder eine CSV-Datei. Frage mich aber nicht wie du die anlegst.


hmm...also geht das nciht mit ner txt datei? nur mit ner csv oder access db? schade...dann muss ich wohl umsteigen und es mit csv oder txt machen... kann mir wer nur sagen, was einfacher ist? ;)

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

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 06.10.07 16:43 
user profile iconsepp_a_u hat folgendes geschrieben:
ich will die benutzereingabe speichern ja. ist ja quasi ein telefonbuch. die daten werden abgespeichert. teste den code doch einmal.
Das brauch ich nicht ;-)

Wenn ich sehe, dass Du mit Write einfach alles hinter einander weg in die Datei schreibst, wundere ich mich nicht, dass da keine Tabellenform bei rum kommt. Überlege doch mal, was die Write-Methode des StreamWriters macht.

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

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 16:47 
user profile iconChristian S. hat folgendes geschrieben:
user profile iconsepp_a_u hat folgendes geschrieben:
ich will die benutzereingabe speichern ja. ist ja quasi ein telefonbuch. die daten werden abgespeichert. teste den code doch einmal.
Das brauch ich nicht ;-)

Wenn ich sehe, dass Du mit Write einfach alles hinter einander weg in die Datei schreibst, wundere ich mich nicht, dass da keine Tabellenform bei rum kommt. Überlege doch mal, was die Write-Methode des StreamWriters macht.


ja wie du schon gesagt hast alles hintereinander schreiben oder? muss ich etwa in der methode öfter die write-methode aufrufen und dann immer den abstand von vorne vergrößern und dann irgendwie in jeder write-methode den array-bereich übergebe? oder wie oder wo? ;)

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

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 06.10.07 16:55 
Du musst überlegen, was alles in eine Zeile soll und wann Du eine neue Zeile in der Datei anfängst.

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

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 17:03 
ja pro datensatz EINE zeile. wenn man dann eine zweite adresse eingeben will, dann muss einen neue zeile her. ich habe vorher schon gemerkt, dass dies bei meinem code leider nicht möglich ist. aber ich frage mich, wie ich das realisieren kann. hab gedacht in der write-methode noch ein \n hinzufügen, aber dann wird nach jeder eingabe (name, vorname) usw eine neue zeile angefangen. und das will ich ja auch nicht :(

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

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 06.10.07 17:13 
Mögliche Lösung:
Du liest eine komplette Adresse (Also Name, Vorname, etc.) in Variablen ein und schreibst sie dann in einem Rutsch mittels WriteLine in eine Zeile der Datei. Da kannst Du dann wieder eine entsprechende Stringformatierung für verwenden.

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

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 06.10.07 17:24 
also ich habe jetzt mal eine neue klasse gemacht:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
public class Adresse
{
    public string name;
    public string vorname;
    public string Strasse;
    public int PLZ;
    public string Ort;
    public string Telefon;

    public Adresse(string n, string v, string s, int p, string o, string t)
    {
        this.name = n;
        this.vorname = v;
        this.Strasse = s;
        this.PLZ = p;
        this.Ort = o;
        this.Telefon = t;
    }
}


auf diese greife ich dann in meinem hauptprogramm drauf zu:

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:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace telefonbuch
{
    class Program
    {
        static void Main(string[] args)
        {
            Menue();            
        }
        static void WriteFile()
        {            
            StreamWriter schreiben = new StreamWriter(@"telebuch.txt"true);            
            schreiben.Write(Console.ReadLine());            
            schreiben.Close();            
        }
        static void ReadFile()
        {            
            StreamReader lesen = new StreamReader("telebuch.txt");
            while (!lesen.EndOfStream)
            {
                Console.WriteLine(lesen.ReadLine());                               
            }
            lesen.Close();
            Console.ReadLine();
        }        
        static void Menue()
        {     
            bool Ende = true;                      
            string eingabe;

            Console.Clear();
            Console.WriteLine("\n\n\t \t\t      Menue   \n\n"); 
            Console.WriteLine("\t \t -------------------------------");
            Console.Write("\t \t |#############################|");
            Console.Write("\n \t \t |# N - Neue Adresse eingeben #| \n \t"); 
            Console.Write("\t |# A - Datensätze anzeigen   #| \n \t \t |# B - Beenden               #|" );              
            Console.Write("\n \t \t |#############################|");
            Console.WriteLine("\n \t \t -------------------------------");            
            
            do
            {
              switch (eingabe = Console.ReadLine().ToUpper())
              {
                case "N":                  
                    Adresse ady = new Adresse();     
                     
                      WriteFile();                
                            Console.WriteLine("\nDatensatz gespeichert...");
                            Console.ReadLine();
                    Menue();       
                    break;
                  
                case "A":
                        Console.WriteLine("\n\nDatensatzausgabe");
                        Console.WriteLine("------------------\n\n");
                        Console.WriteLine("+--------------+--------------+--------------+--------------+--------------+");
                        Console.WriteLine("| Nachname     | Vorname      | Strasse      |   Ort        |  Telefon     |");
                        Console.WriteLine("+--------------+--------------+--------------+--------------+--------------+");
                        ReadFile();                    
                    Menue();               
                  break;
                  
                case "B":
                  Ende = true;
                  break;   
                default:
                  Console.WriteLine("Fehlerhafte Eingabe!");
                        Console.ReadLine();
                  Menue();
                  break;
              }
            } while (!Ende);                     
        }

    }
}


jedoch, wie kann ich nun die einzelnen daten einlesen? komme damit noch nicht so recht klar :( wie muss ich den code abändern, damit ich das zeug einlesen kann?

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

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 06.10.07 17:32 
Jedes Feld der Klasse mittels Console.ReadLine() einlesen und dann alle Felder formatiert in eine Zeile in die Datei schreiben.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
ady.name = Console.ReadLine();
ady.vorname = Console.ReadLine();

/* irgendwo anders dann */
schreiben.WriteLine(ady.name+" .... "); //den String natürlich noch formatieren

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".