myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Speichern in eine bestehende txt-Datei
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Speichern in eine bestehende txt-Datei

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern


AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Speichern in eine bestehende txt-Datei

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich bastel gerade an einem einfachen Projekt mit dem ich einfach verschiedene Farben, Lagerort und Gewicht erfassen und danach suchen kann.
Das ganze wird (vorläufig) in einer txt Datei gespeichert (irgendwann auf meinem Server) und in einer Listbox angezeigt.

Wenn ich etwas neu hinzufügen möchte (zu der bestehenden txt Datei) überschreibt er mir alles und fügt nur den neuen Wert ein.
Ich würde das ganze jeweils in einer Zeile schreiben. Wobei jede Zeile eine neue Farbe sein soll.

Könnte mir da jemand einen denkanstoß geben? Bin den ganzen Vormittag am suchen aber finde nicht´s spezielles auf mein Problem...

C#-Code:
private void btn_Eintragen_Click(object sender, EventArgs e)
        {
            string RAL = txt_in_RAL.Text;
            string Lagerort = txt_in_Lagerort.Text;
            string Gewicht = txt_in_Gewicht.Text;
            File.WriteAllText(@"C:\test.txt", RAL + "\t" + "\t" + Lagerort + "\t" + "\t" + Gewicht);
        }

Danke :)
25.09.2019 12:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Urza Urza ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.05.2019
Beiträge: 40
Entwicklungsumgebung: VS 2017, VS 2019, ReSharper


Urza ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

25.09.2019 12:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Super, mit ein bissl basteln hab ichs hinbekommen.

Vielen Dank!!!

Hier der Code:

C#-Code:
private void btn_Eintragen_Click(object sender, EventArgs e)
        {
            string Pfad = @"C:\test.txt";
            string RAL = txt_in_RAL.Text;
            string Lagerort = txt_in_Lagerort.Text;
            string Gewicht = txt_in_Gewicht.Text;

            File.AppendAllText(Pfad,"\n" + RAL + "\t" + "\t" + Lagerort + "\t" + "\t" + Gewicht);
         }
25.09.2019 13:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Eine Frage hätte ich noch...

Ich habe in meiner Liste bereits eine Zeile mit beispielsweise:
RAL 5018 Lagerort 100

Wenn ich jetzt dieselbe Farbe dazufügen möchte legt er mir so eine weitere Farbe an. Ist es möglich nur auf das Gewicht dazu zu addieren?
25.09.2019 15:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.575
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Solche Logik musst Du selbst umsetzen; das schenkt Dir das Framework natürlich nicht.

Vorgehensweise zB:
- Gesamte Datei einlesen
- Zeile suchen
- Werte ersetzen
- Datei neu schreiben

Eine PlainTextdatei ist aber eine sehr ungünstige Art und Weise eine solche "Datenbank"-ähnliche Struktur umzusetzen.
Da ist es viel einfach mit XML oder Json zu arbeiten, da Du hier auch gezielt suchen kannst.

 Beispiele für die XML-Serialisierung
25.09.2019 15:29 Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für die Antwort.
Ja, das ich mit der Textdatei nicht weit komme wusste ich. Jedoch für meinen Einstieg fand ich das am einfachsten. :)
Ich hatte auch schon eine SQL Datenbank ins Auge gefasst, allerdings komm ich mit der Verbindung zwischen dem Programm und meinem Server nicht klar.
Werd das wohl über die XML machen und Dateiaustausch mittels FTP.

Dankeschön! :)
26.09.2019 07:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 373
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und bitte auch daran denken, dass man *niemals* direkt auf C: schreibt.
26.09.2019 10:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.631
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo AceTecNic,

Zitat:
Werd das wohl über die XML machen und Dateiaustausch mittels FTP.

Machs lieber ordentlich und nimm eine Datenbank.

Welches Problem hattest du mit dem SQL Server? Firewall Port TCP 1433?

mfG Gü
26.09.2019 10:45 Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@Stefan.Haegele
Normal schreibe ich nicht auf C: - War halt nur zur Veranschaulichung :)

@gfoidl
Jetzt wo du es schreibst, ich glaube ich hatte den Port vergessen einzutragen...
Hab es zuvor mit HeidiSQL versucht (Port 3306), da wollte es ebenfalls nicht.
Ich kann doch die Listbox direkt mit einer Datenbank verbinden? Im Designer die Listbox auswählen und rechts oben an der Ecke "An Daten gebundene Elemente verwenden".
Oder gibt es da einen besseren Weg?

Ich sag mal so: Die Datenmenge hält sich in Grenzen. Wenn ich 60 Positionen mit jeweils 3 Angaben habe ist das schon das Maximum.
26.09.2019 11:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.631
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo AceTecNic,

Zitat:
Ich kann doch die Listbox direkt mit einer Datenbank verbinden?

Ja ist möglich, aber auf lange Sicht nicht ganz ideal, da es eine direkte Kopplung von der UI (ListBox) zur DB ist. Besser wäre eigene Modell-Klassen zu erzeugen, die per einem Service geladen werden und diese Modell-Instanzen dann an das UI gebunden werden.
So hast du es später leichter, falls es Änderungen gibt. Zudem ist der Code so testbarer (Unit-Tests, etc.).
Wenns eine WPF Anwendung ist, so siehe  [Artikel] MVVM und DataBinding

Zitat:
60 Positionen mit jeweils 3 Angaben habe

Gut für so geringe Datenmengen ist SQL Server vllt. etwas überdimensioniert.

Da kannst du schon XML nehmen und per Deerialisierung in den Speicher laden um dort die Manipulationen vornehmen, dann per Serialisierung wieder ins Dateisystem schreiben.
Wegen FTP: beachte aber dass es bei diesem Vorgehen keinen (echten) Schutz vor Mehrbenutzerzugriffen / Races gibt. D.h. die Änderung die Benutzer A macht, können von Benutzer B leicht überschrieben werden. "Echte" DBs bieten hier Möglichkeiten an das handzuhaben.
Stellt das kein Problem dar, so nimm einfach XML.

mfG Gü
26.09.2019 12:49 Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.435
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

@AceTecNic
Wenn die DB der Anwendung lokal sein soll, also nicht zwischen X Anwendungen geteilt wird, würde ich Sqlite anstelle von Xml setzen.

Wenn du aber eine zentrale Datenbank brauchst für X Anwendungen, solltest du später auch einen DB Server setzen und die Daten per Webservice abfragen und nur noch anzeigen.

Xml Dateien als Datenquelle würde ich wenn möglich meiden.
Bei kleinen und lokalen Lösungen mag es noch okay sein, sobald es aber um geteilte Daten oder größere Datenmengen geht, ist das unperformant und durch geteilten Zugriff problematisch.

T-Virus
26.09.2019 12:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für eure Anteilnahme! smile

@gfoidl
Hatte mir das ganze so gedacht:
in der Hauptform ist eine Listbox (oder ähnlich) in der mir die Daten angezeigt werden.
Mittels der BearbeitenForm kann ich die Liste bearbeiten, also hinzufügen und entfernen bzw. nur einen Parameter bearbeiten. (Mittelfristig dachte ich an eine Art Passwortabfrage, da aber auf die Liste nur ab und zu zugegriffen wird von max 2-3 Personen seh ich das nicht so eng. Zudem sind es keine Sensiblen Daten smile )

@T-Virus
Mit der DB hatte ich mich gestern Abend mal bissl auseinander gesetzt. (Microsoft SQL Server)
Da das aber ein riesiges Thema ist schieb ich das noch ein Wenig. Zudem ich die DB auf meinem rootserver haben möchte und nicht nur Lokal. Problem ist, ich muss die Daten an Ort A überwiegend eingeben und an Ort B eigentlich nur abrufen bzw. einsehen können.
Das die Variante mit XML nicht die perfekte ist denk ich mir auch. Allerdings für mich als totalen einsteiger ist das schon ein großes Projekt großes Grinsen Daumen hoch


Hab mich mal mit dem XML ein wenig beschäftigt. Ich glaube von der Struktur her komme ich klar. Falls es jemand interessiert hier ist mal ein Beispiel:

XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<Farbtabelle>

  <RAL5018>
    <Lagerort>106</Lagerort>
    <Gewicht>14.5</Gewicht>
  </RAL5018>

  <RAL7035>
    <Lagerort>108</Lagerort>
    <Gewicht>8</Gewicht>
  </RAL7035>

  <RAL7016>
    <Lagerort>110</Lagerort>
    <Gewicht>18</Gewicht>
  </RAL7016>

</Farbtabelle>
26.09.2019 14:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
BerndFfm BerndFfm ist männlich
myCSharp.de-Team

avatar-3299.jpg


Dabei seit: 20.01.2006
Beiträge: 3.574
Entwicklungsumgebung: Visual Studio 2015
Herkunft: Frankfurt a.M.


BerndFfm ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe mich mit XML nie anfreunden können. Inzwischen mache ich alles mit JSON, da kann man komplette Strukturen mit ein paar Befehlen speichern und laden ohne sich um die Dateistruktur kümmern zu müssen. Die Dateistruktur ist in einer Klasse definiert.

Eine Klasse als Beispiel :

C#-Code:
public class QuasarFiles
{
    public string filename { get; set; }
    public string directory { get; set; }
    public long size { get; set; }
    public string checksum { get; set; }
    public DateTime created { get; set; }
    public DateTime modified { get; set; }
    public bool download { get; set; }
    public bool overwrite { get; set; }
}

JSON schreiben :

C#-Code:
List<QuasarFiles> files = new List<QuasarFiles>();
files.Add(new QuasarFiles()
{
    filename = fn,
    directory = verz,
    size = length
});
string json = JsonConvert.SerializeObject(files, Newtonsoft.Json.Formatting.Indented);
json = json.Replace("\r\n\r\n", "\r\n");
File.WriteAllText(@"...\files.json", json);

JSON lesen :

C#-Code:
string json = File.ReadAllText(@"...\files.json");
List<QuasarFiles> files = JsonConvert.DeserializeObject<List<QuasarFiles>>(json);
foreach (QuasarFiles fil in files)
{ ... }

Man braucht die Newtonsoft.Json.dll dazu. Kann man mit NuGet installieren.

Grüße Bernd
26.09.2019 14:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.575
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



Zitat:
C#-Code:
json = json.Replace("\r\n\r\n", "\r\n");

.. auch eher aus optischen Gründen, oder?


XML-Code:
<Farbtabelle>

  <RAL5018>
    <Lagerort>106</Lagerort>
    <Gewicht>14.5</Gewicht>
  </RAL5018>

  <RAL7035>
    <Lagerort>108</Lagerort>
    <Gewicht>8</Gewicht>
  </RAL7035>

  <RAL7016>
    <Lagerort>110</Lagerort>
    <Gewicht>18</Gewicht>
  </RAL7016>

</Farbtabelle>

Ist im Hinblick der Struktur aber total falsch.
XML Elemente sind aus Software-Sicht Objekte.
Du hast aber sicherlich nicht für jeden RAL-Ton eine eigene Klasse.
Der RAL-Ton ist eine Eigenschaft.

Passend wäre da eher:

XML-Code:
<Farbtabelle>

  <Item Type="RAL5018">
    <Lagerort>106</Lagerort>
    <Gewicht Type="Kg">14.5</Gewicht>
  </Item >

</Farbtabelle>

Und durch Attribute kann man auch weitere Values mitgeben (wie zB. ob das Gewicht Kilo ist, oder was die Value aussagen soll).

Ansonsten wie der Lehrer: Sprichste von 14.5 Äpfeln oder Birnen?
26.09.2019 14:57 Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Grobe Ansatz passt ja aber? :)

Wenn ich das in der Form mache:<Item Type="RAL5018">
Dann wäre dem nur <Farbtabelle> übergeordnet und die Werte <Lagerort> und <Gewicht> untergeordnet zu <Item Type="RAL5018">

Versteh ich das so richtig.

Also sollte ich später eine Suchfunktion mit einbinden könnte ich z.b. nach RAL5018 suchen und bekäme die Werte darunter mitgeliefert?


@BerndFfm
Danke für deinen Hinweis, hatte mir JSON auch schon ins Auge gefasst, möchte aber vorerst mal bei XML bleiben. Finde da iwie leichter den Einstieg. Danke :)
26.09.2019 15:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.631
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

Zitat:
Suchfunktion mit einbinden könnte ich z.b. nach RAL5018 suchen und bekäme die Werte darunter mitgeliefert?

Ja. Von der Suche bekommst du das Element und damit verbunden sind alle Kinder.
Vorausgestezt unter Suche verstehen wir Linq2Xml, XPath, etc. und keine einfaches string.IndexOf.



Zitat:
C#-Code:
<Gewicht Type="Kg">14.5</Gewicht>

Ansonsten wie der Lehrer

Wenn schon dann "Masse" und die SI-Präfix "k" klein. SCNR :-)


mfG Gü
26.09.2019 15:56 Beiträge des Benutzers | zu Buddylist hinzufügen
AceTecNic AceTecNic ist männlich
myCSharp.de-Mitglied

Dabei seit: 23.02.2018
Beiträge: 19
Entwicklungsumgebung: Microsoft Visual Studio 2017
Herkunft: Bayern

Themenstarter Thema begonnen von AceTecNic

AceTecNic ist offline Füge AceTecNic Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok, da muss ich mich wohl länger mal einlesen...
Hab grad mal etwas nachgeschlagen mit dem Linq2XML, da wird´s mir gleich schwindlig...

Gut ich glaub ich fange mal mit einfacheren Suchfunktionen an, bzw. zuerst muss ich mir das Speichern beibringen sonst gibt es nicht´s zu lesen :P
26.09.2019 16:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Monate.
Der letzte Beitrag ist älter als 6 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 01.04.2020 02:41