| |
VB.NET - Ein- und UmsteigerDateien umbenennen | | | Autor: susy00 | Datum: 25.07.16 20:09 |
| Hallo Forum,
ich habe ein Problem. Mein Chef will das ich die Abgelegten Rechnungen (das sind mehrere tausende) neu formatiere. Jeder Sachbearbeiter hat die Dateien irgendwie anders benannt.
Alles sind txt Dateien. Er will das ich alles Dateien nach der in der Rechnung abgelegten Auftragsnummmer abspeichere. Die Auftragsnummer ist 6stellig und ist in der Rechnung unter
Auftragsnummer:123456 abgespeichert
Die Rechnungen liegen alle auf C:\Rechnungen
Gibt es hier eine einfache Lösung ? Ein bekannter hat mir das Forum empfohlen.
Tschüssi | |
Re: Dateien umbenennen | | | Autor: Manfred X | Datum: 25.07.16 21:16 |
| Hallo!
Was hat der Begriff "Formatieren" in diesem Zusammenhang zu bedeuten?
Auf Grundlage Deiner (vagen) Angaben könnte eine Lösung etwa so aussehen:
Private Sub UmbenennenNachAuftragsnummer(ByVal folder As String)
'Alle Textdateien im Ordner durchlaufen
For Each file As String In IO.Directory.GetFiles _
(folder, "*.txt", IO.SearchOption.AllDirectories)
'Zeilen der aktuellen Datei lesen
Dim lines() As String = IO.File.ReadAllLines(file)
Dim index As Integer = -1, found As Boolean = False
Do
'Zeile mit Auftragsnummer suchen
index += 1
If lines(index).ToLower.StartsWith("auftragsnummer:") Then
'Auftragsnummer in Zeile ermitteln
Dim parts() As String = lines(index).Split(":"c)
If Not parts.Length = 2 Then
Stop 'ungeeignete Zeile mit Auftragsnummer
End If
'Neuen Namen der Datei aufbauen
Dim newname As String = _
IO.Path.Combine_
(IO.Path.GetDirectoryName(file), parts(1)) & ".txt"
'Umbenennen
Rename(file, newname)
found = True
End If
Loop While Not found AndAlso index < lines.Length - 1
If Not found Then
Stop 'Keine Auftragsnummer in der Datei
End If
Next File
End Sub Aber verstehe und teste den Vorschlag erst genau (Testdateien!),
ehe Du solchen Code auf Deine Auftrags-Dateien losläst.
Der Einbau von Try__Catch__Blöcken könnte auch nicht schaden.
Eventuell noch zu beachten:
Doppelte Auftragsnummern und bereits vorhandene Dateinamen.
Hinter Parts(1) könnte man noch ein "Trim" setzen (Leerzeichen entfernen).
Beitrag wurde zuletzt am 25.07.16 um 21:30:54 editiert. | |
Re: Dateien umbenennen | | | Autor: susy00 | Datum: 26.07.16 19:13 |
| Hallo,
doppelte Auftragsnummern und bereits vorhandene Dateinamen kann ich ausschließen ;)
Ich weis nur noch nicht wo ich meinen Pfad C:\Rechnungen hinschreiben muss ?
Und wie kann ich das ganze dann mit einem Button aufrufen ?
Tschüssi | |
Re: Dateien umbenennen | | | Autor: Manfred X | Datum: 26.07.16 22:25 |
| Wenn Du nicht programmieren kannst, solltest Du
keine derartigen Aufträge übernehmen.
Ich rate dringend davon ab, unverstandenen Code zur
Manipulation von Geschäftsdaten zu verwenden.
Hier ein Windows.Forms-Formular ....
(Auswahl des Pfades im FolderBrowser-Dialog.)
Public Class frmRenameFiles
Private fbd As New FolderBrowserDialog
Private WithEvents btnRename As New Button With _
{.Parent = Me, .Text = "Rename Files"}
Private Sub btnRename_Click(sender As Object, _
e As System.EventArgs) Handles btnRename.Click
With fbd
.ShowNewFolderButton = False
If .ShowDialog = _
Windows.Forms.DialogResult.Cancel Then Exit Sub
btnRename.Enabled = False
Me.Text = "Dateien werden umbenannt"
Me.Refresh()
UmbenennenNachAuftragsnummer(fbd.SelectedPath)
Me.Text = ""
btnRename.Enabled = True
End With
End Sub
Private Sub UmbenennenNachAuftragsnummer(ByVal folder As String)
'Code der Routine vom obigen Post einfügen
End Sub
End Class | |
Re: Dateien umbenennen | | | Autor: Franki | Datum: 27.07.16 01:40 |
| Hallo,
um was für eine Art Rechnungen handelt es sich?
Dir ist ja schon bewusst, dass aus juristischen Gründen die Rechnung des Empfängers und des Rechnungsstellers zu 100% identisch sein müssen, egal in welcher Form sie an den Kunden übermittelt worden ist.
Jedes anerkannte Warenwirtschaftssystem welches auch Rechnungen schreiben kann hat die Funktion, dass Rechnungen wenn sie final sind und an den Kunden übermittelt worden sind nachträglich nicht mehr verändert werden können/dürfen. Bei Fehlern muss man das dann über eine Gutschrift/neue Rechnung machen.
Also frage deine Chef mal wie er das sieht gegenüber dem Finanzamt wenn er mal eine Steuerprüfung hat, oder wenn es mal einen Streitfall mit einem Kunden gibt. Damit ist dein Chef auf der sicheren Seite und er sollte sich auch mal bei seinem evtl. vorhandenen Stuerberater erkundigen, ob die Rechnungsänderungen überhaupt zuslässig sind bzw. wie sie gemacht werden können/dürfen.
Gruß
Frank | |
Re: Dateien umbenennen | | | Autor: DotNetErbse | Datum: 28.07.16 07:33 |
| Eine Änderung des Namens der Datei der Rechnung verändert die Rechnung nicht.
Mit freundlichen Gr??en
DotNetErbse
[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)] | |
Re: Dateien umbenennen | | | Autor: susy00 | Datum: 28.07.16 17:37 |
| Hallo,
ich sehe das auch so das eine Änderung des Namens der Datei die Rechnung nicht verändert.
Habe das ganze jetzt so zusammengefügt:
Public Class Form1
Private fbd As New FolderBrowserDialog
Private WithEvents btnRename As New Button With _
{.Parent = Me, .Text = "Rename Files"}
Private Sub btnRename_Click(sender As Object, _
e As System.EventArgs) Handles btnRename.Click
With fbd
.ShowNewFolderButton = False
If .ShowDialog = Windows.Forms.DialogResult.Cancel Then Exit Sub
btnRename.Enabled = False
Me.Text = "Dateien werden umbenannt"
Me.Refresh()
UmbenennenNachAuftragsnummer(fbd.SelectedPath)
Me.Text = ""
btnRename.Enabled = True
End With
End Sub
Private Sub UmbenennenNachAuftragsnummer(ByVal folder As String)
'Alle Textdateien im Ordner durchlaufen
For Each file As String In IO.Directory.GetFiles(folder, "*.txt", _
IO.SearchOption.AllDirectories)
'Zeilen der aktuellen Datei lesen
Dim lines() As String = IO.File.ReadAllLines(file)
Dim index As Integer = -1, found As Boolean = False
Do
'Zeile mit Auftragsnummer suchen
index += 2
If lines(index).ToLower.StartsWith("auftragsnummer:") Then
'Auftragsnummer in Zeile ermitteln
Dim parts() As String = lines(index).Split
If Not parts.Length = 2 Then
Stop 'ungeeignete Zeile mit Auftragsnummer
End If
'Neuen Namen der Datei aufbauen
Dim newname As String = _
IO.Path.Combine(IO.Path.GetDirectoryName(file), parts(1)) & _
".txt"
'Umbenennen
Rename(file, newname)
found = True
End If
Loop While Not found AndAlso index < lines.Length - 1
If Not found Then
Stop 'Keine Auftragsnummer in der Datei
End If
Next file
End Sub
End Class Leider wird die Auftragsnummer nicht gefunden .
Oder sieht jemand einen Fehler ?
Beitrag wurde zuletzt am 28.07.16 um 17:37:50 editiert. | |
Re: Dateien umbenennen | | | Autor: Manfred X | Datum: 28.07.16 21:49 |
| Wie kommst Du auf index +=2 ?
Wie bereits erwähnt, sind Deine Angaben völlig unzureichend.
Mehr als allgemeine Hinweise sind deshalb nicht möglich.
Zum Beispiel .....
Welche CodePage/Codierung des Textes wird verwendet?
Stehen Zeilentrenner in der Datei? Carriage Return - Line Feed? Andere?
Steht die Auftragsnummer am Anfang einer Zeile?
Stehen in dieser Zeile weitere Angaben (hinter der Nummer)?
Sind zusätzlich zum Rechnungs-Text andere Codes (XML/RTF o.ä.) in die
Dateien eingetragen?
Stehen eventuell Nullbytes oder Steuerzeichen in der Datei (z.B. Tabulator)?
usw.
Alle diese Angaben können "code-relevant" sein. | |
Re: Dateien umbenennen | | | Autor: Franki | Datum: 29.07.16 02:13 |
| Hallo,
Zitat: | | Eine Änderung des Namens der Datei der Rechnung verändert die
Rechnung nicht. | |
Der Inhalt der Rechnung bleibt identisch, aber ob der Dateiname Bestandteil eines Betriebsablaufs sein darf oder muss ist eine anderen Sache.
Bei finalen Rechnungen die z.B. per E-Mail mit digitalier Signatur an den Kunden geschickt worden sind, oder in einem Warenwirtschaftssystem geschrieben worden sind dürfen auch Dateinamen nicht nachträglich verändert werden.
In einem vom Finanzamt anerkannten WaWi geht das eigentlich auch gar nicht.
Gruß
Frank | |
Re: Dateien umbenennen | | | Autor: susy00 | Datum: 29.07.16 20:03 |
| Hallo,
habe es jetzt auch mit +=1 versucht. Leider ging es auch nicht
Wir haben ja vorgedrucktes Briefpapier. In der Textdatei steht nur die Adresse, Auftragsnummer und die Waren.
Habe mal ein Beispiel hochgeladen.
http://xup.in/dl,41798541 | |
Re: Dateien umbenennen | | | Autor: Manfred X | Datum: 29.07.16 20:35 |
| In Deinem Beispiel steht am Zeilenanfang eine Zeilennummer.
Die Auftragsnummer findest Du in dem Fall nicht per "StartsWith",
sondern durch "Contains".
'.....
If lines(index).ToLower.Contains("auftragsnummer:") Then
'.... Verwende ich direkt die hochgeladene Datei Muster.Txt,
funktioniert die Umbenennung mit dem oben von mir geposteten Code.
Der Inhalt Deiner Rechnungsdateien muß "irgendwie" anders
aussehen bzw. codiert sein.
Beitrag wurde zuletzt am 29.07.16 um 20:58:04 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|