Laden...

[gelöst] Generierte datei mit laufender Nr ausstatten

Erstellt von zecken81 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.668 Views
Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren
[gelöst] Generierte datei mit laufender Nr ausstatten

Moin Moin

Ich generiere mit meinem Programm eine inf Datei. Der Dateiname enthät eine KundenID das akt. Datum und die Anzahl an (Minuten/Tag)/2. Das klappt auch alles wunderbar. Nun sollen die Dateien aber noch zusätzöich mit einer laufenden Nr ausgestattet werden.

Vielleich hat jmd. von euch eine Idee wie das geht.

Lg

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo zecken81,

und wo ist dein Problem?

herbivore

Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Hey kennen uns ja schon 🙂

Das Problem ist:
StreamWriter schreiben = File.CreateText(Pfad1 + "" + filename + "" + filename2 +"_" + filename5);
Pfad1: ist der Pfad
filename ist das Datum
filename2 : Anzahl Minuten/tag/2
und filename5 ist die Endung also hier .*inf

und wie bekomme ich da jetzt noch eine laufende Nr ein
die erste erstellte datei soll 0001 sein die zweite 0002

Am Ende sol der Dateiname so aussehen
34300_20080528_333_0002.inf

und dieses 0002 macht mir Probleme

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo zecken81,

wenn ich dich richtig verstehe, ist dein Problem herauszufinden, welche die nächste freie Nummer ist, oder?

herbivore

Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Auch

Der Kunde bekommt das Programm und generiert Inf dateien, die dann wieder zu uns kommen und wir machen mit denen was.

Jede Nr darf aber nur einmal vorkommen also die laufende nr 0001 darf es nur einmal geben. Mein problem ist es herauszufinden, wie man das in den Dateinamen reinbekommt und nie wieder die laufende Nr verwendet auch wenn das Datum oder der Zeitstempel anders sind. Dies gilt allerdings nur für den Kunden mit der AuftragsID xxxxx der Kunde mit der AuftragsID yyyy darf die nr 0001 verwenden aber natürlich auch nur einmal

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo zecken81,

und das hätten wir alles aus deinem ersten Beitrag erahnen sollen?

So wie ich es verstehe ist kann es also sein, dass bereits erstelle Dateien gelöscht oder verschoben werden. Ich denke, dann wird dir nicht anderes übrig bleiben, als dir die nächste freie laufende Nummer (kunden- und auftragsbezogen) zu merken. Wenn das Programm ohnehin mit einer Datenbank arbeitet, dann am besten dort.

herbivore

C
252 Beiträge seit 2007
vor 15 Jahren

du zählst einfach wieviele *.inf dateien in dem verzeichnis vorhanden sind und erhöhst diese zahl um 1 und nimmst sie einfach in den Dateinamen auf.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo chavez,

was wird an zwei Punkten scheitern. Zum einen, wenn Datei gelöscht oder verschoben werden. Und es klingt ja so, als wäre das möglich oder zumindest nicht vollkommen auszuschließen. Und zu anderen daran, dass die laufende Nummerierung auftragsbezogen ist.

herbivore

Gelöschter Account
vor 15 Jahren

zuerst holst du dir alle dateinamen mit hilfe der Directory klasse

dann splittest du jeden dateinamen nach jedem unterstrich
dann hast du die laufende nummer der jeweiligen datei wobei du dir die höchste merkst.

wenn du alle dateien durch hast, addierst du 1 zu der höchsten gemerken nummer und schon hast du eine neue nummer für die nächste datei.

wie du allerdings hier:

StreamWriter schreiben = File.CreateText(Pfad1 + "" + filename + "" + filename2 +"_" + filename5);

die neue laufende nummer hereinbekommst, kannst du :rtfm: nachlesen mit dem stichwort : string.Format(...)

was die unterteilung nach kunden und aufträgen anbelangt hast du noch keinerlei informationen hierzu gegeben aber ich bin mir sicher das du nach etwas nachdenken auch auf diese lösung kommen wirst.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo JAck30lena,

nur wenn der Kunde letzte Datei löscht, wird beim nächsten Mal die gleiche Nummer vergeben. Und darauf was Kunden tun hat man nur begrenzt Einfluss.

herbivore

Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Ja genau aber das hört sich ja alles schonmal gut an

Werd mir mal ein paar Gedanken machen und es ausprobieren

Vielen Dank erstmal

2.760 Beiträge seit 2006
vor 15 Jahren

Also wenn das ein verteiltes System ist (nach was es sich auch irgendwie anhört) dann müsste man den ganzen Vorgang auch noch mit ?anderen Filialien des Kunden? synchronisieren.

Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Hey Leute hab es hinbekommen

Danke für die Vielen tipps.

Gehe einfach davon aus, dass der Kunde die Dateien aus dem Ordner nicht löscht und zähle dann die Anzahl der Dateien.

Allerdings hab ich jetzt ein andere Problem. Die laufende Nr. muss fünfstellig sein.
Also z.B. 00001. Im Dateinamen steht aber immer nur 1. Die Nullen werden gelöscht. Kann man das irgendwie umgehen???

Danke

Gelöschter Account
vor 15 Jahren

string.Format...

Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Da hab ich schon geschaut aber bei msdn werd ich nicht so richig schlau. Gibt es noch eine andere Quelle?

Gelöschter Account
vor 15 Jahren

die forumssuche z.b.?

B
114 Beiträge seit 2007
vor 15 Jahren

Was hat denn string.Format damit zu tun.
Klingt zwar gut, aber gefunden hab ich da auch nix.

Erweitere stattdessen deine Suche in der MSDN auf die string-Member PadLeft und PadRight. Das sollte dir weiterhelfen.

Gelöschter Account
vor 15 Jahren

das ist wenn man nur rudimentär sucht.

in diesem konkreten beispiel:

string stringCount = myIntegerCount.ToString("0000"));

oder

string stringCount = string.Format("{0:0000}",myIntegerCount);

edit: ach ja und mit padleft usw dürfte das ziemlich umständlich werden...

Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 15 Jahren

Danke JAck30lena habs hinbekommen

B
114 Beiträge seit 2007
vor 15 Jahren

Ah ok irgendwie bin ich davon ausgegangen das ein String zugrunde liegt. Blödsinn eigentlich.
Bei den Überladungen von ToString bei int ist das dann ziemlich genau beschrieben, da haste Recht. Obgleich da "D4" statt "0000" vorgeschlagen wird.

Gelöschter Account
vor 15 Jahren

macht ja keinen unterschied. im übrigen kann man einen string auch als ausgangspunkt dafür nehmen.