Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Grosse datei Teilen...

blow / 9 Antworten / Baumansicht Nickles

Hey leute, brauche dringend hilfe...


Ausgangslage: Ich habe dateien, die von einem Tag alle rechnungen beinhaltet. (Von einem verkaufsgeschäft) diese rechnungen sind alle aneinander gereiht und ich muss nun eine batch schreiben, die die rechnungen wieder trennt und in einzelne dateien abspeichert. vor jeder rechnung ist ein "f " und eine nummer. wie kann ich das machen?


bitte um hilfe

bei Antwort benachrichtigen
PaoloP blow „Grosse datei Teilen...“
Optionen

Also ich bin kein Experte für Dos-Befehle aber ich denke mit einem Batch-File wirst Du nicht hinkommen. Muss es unter DOS sein ? Hier würde sich noch QB als kostenlose Möglichkeit anbieten. Unter Windows wäre der Windows-Scripting-Host Dein bester Freund für solche Aufgaben.

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
blow PaoloP „Also ich bin kein Experte für Dos-Befehle aber ich denke mit einem Batch-File...“
Optionen

Nein es muss nicht unter DOS sein... Hättest du denn gerade eine Ahnung, wie ich es machen müsste mit QB ?

bei Antwort benachrichtigen
PaoloP blow „Nein es muss nicht unter DOS sein... Hättest du denn gerade eine Ahnung, wie...“
Optionen

ja ich hätte da schon eine vorstellung aber ich weiss nicht genau was du eigentlich genau machen willst und wieviel Ahnung Du schon hast.
Reicht es wenn ich eine einfache read/write funktion in QB für text-files hier reinposte und du bastelst denn rest drum herum oder brauchst du noch etwas mehr hilfe?

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
blow Nachtrag zu: „Grosse datei Teilen...“
Optionen

Leider habe ich in diesem Gebiet praktisch keine Ahnung und darum bin wohl auch nicht selbst darauf gekommen. Leider kenne ich auch gerade niemanden, der mir noch helfen könnte.

Wäre dir echt dankbar.

Hier ein Beispiel:

Tagesabschluss des Geschäftes:
Alle Rechnungen sind in einem File aufgelistet und zwar in folgendem Style:

f837465923822=======================
Hans Muster
Musterstrasse 837
7373 Musterdorf


Artikel:

1 x Fleisch (Irgendwas) 6.00 Euro

4 x Rivella Blau 5.00 Euro
usw.


f893787877========================

Kunden name
Strasse
Ort

Artikel:

2 x irgendwas



usw.

Es folgen alle Rechnungen von einem Tag.

Nun sollten diese Rechnungen immer bei der Rechnungsnummer getrennt werden und in ein eigenes File geschrieben werden. (Mit kunden Daten und Artikel)

Ich hoffe, diese Erklärung reicht!?

bei Antwort benachrichtigen
martinx24 blow „Leider habe ich in diesem Gebiet praktisch keine Ahnung und darum bin wohl auch...“
Optionen

Hallo!
Könntest Du bitte mal Deine E-Mail-Adresse posten - Danke!
Gruß Martin!

bei Antwort benachrichtigen
martinx24 blow „Grosse datei Teilen...“
Optionen

Hallo blow!

Wenn Du mir Deine E-Mail-Adresse nennen würdest, könnte ich Dir ein fertiges Programm zusenden - OK?

Gruß Martin!

bei Antwort benachrichtigen
KarstenWindfelder martinx24 „Hallo blow! Wenn Du mir Deine E-Mail-Adresse nennen würdest, könnte ich Dir...“
Optionen

Hallo martinx24,

könntest du mir bitte helfen. Ich benötige eine Lösung zum Teilen großer Textdateien und habe gelesen, dass du ein Programm dafür hast.

Meine Mail-Adresse siehe Visitenkarte.

Danke und Gruß
Karsten

bei Antwort benachrichtigen
Yogibear blow „Grosse datei Teilen...“
Optionen

DOS, mit seinen paar Batch-Befehlen kann das wirklich nicht. Aber dafür gibt's ja den Windows Scripting Host. Leg eine Textdatei an und gib ihr die Endung .vbs. Der Inhalt des Visual Basic Scripts könnte in etwa so aussehen:


' Read data from "C:\tmp\Rechnungen.txt" and split by client

Option Explicit
On Error Resume Next

Const ReadFile = 1, WriteFile = 2
Dim fso, BillFile, TextStream, TextLine, BillName, NewBill
Set fso = CreateObject("Scripting.FileSystemObject")
Set BillFile = fso.GetFile("C:\tmp\Rechnungen.txt") ' complete file
Set TextStream = BillFile.OpenAsTextStream(ReadFile)

Do ' get first bill number
TextLine = TextStream.ReadLine
Loop Until TextStream.AtEndOfStream Or _
Left(TextLine, 1) = "f" And IsNumeric(Mid(TextLine, 2, 6))

Do Until TextStream.AtEndOfStream
BillName = Left(TextLine, Instr(1, TextLine, "=") - 1) & ".txt"
Set NewBill = fso.OpenTextFile("C:\tmp\" & BillName, WriteFile, True)
Do ' write single client bill file
 NewBill.WriteLine TextLine
 TextLine = TextStream.ReadLine
Loop Until TextStream.AtEndOfStream Or _
 Left(TextLine, 1) = "f" And IsNumeric(Mid(TextLine, 2, 6))
NewBill.Close
Loop
TextStream.Close

Set NewBill = Nothing
Set TextStream = Nothing
Set BillFile = Nothing
Set fso = Nothing
bei Antwort benachrichtigen
blow Nachtrag zu: „Grosse datei Teilen...“
Optionen

Hey leute, ich habe es hingekriegt mit hilfe von WinBatch Studio. nun habe ich noch ein kleines problem...
...ich muss noch einen fehlerabfang machen. wenn man z.b. kein dateiname eingibt, muss ein fenster kommen, das sagt: bitte dateiname nochmals eingeben.

Hier der Quelltext:


NewFileStatus = 0
CCNr = 0
Verzeichnis = 0
FirstTime = 0
picklistfile = 0



picklistfile = AskLine("Datei", "Bitte Dateiname angeben: (X = Beenden)", "PICKLIST.t20030103") ;Eine Textbox erscheint, in die man den Dateinamen eingeben muss.
handle = FileOpen("%picklistfile%", "READ") ;Ein file namens "picklistfile" wird erstellt und die eingegebene Datei wird gelesen.

x = FileRead(handle)

while @TRUE
if x == "*EOF*" then ;Wenn datei "EOF" dann Pause
Break
else
if FirstTime == 0 then
VerzeichnisPos = StrScan(x, ".", 1, @FWDSCAN) ;Eingegebener Dateiname wird auf die stellen nach dem . gesucht
VerzeichnisPos = VerzeichnisPos + 1
PicklistPos = StrScan(picklistfile, ".", 1, @FWDSCAN) ;String "Picklistfile" wird gesucht. Eine stelle nach dem . vorwärts.
PicklistPos = PicklistPos + 1
Verzeichnis = strsub(x, VerzeichnisPos, 9) ;Sucht das Verzeichnis auf Files ab mit 9stellen nach dem .
if Verzeichnis == strsub(picklistfile, PicklistPos, 9) then ;
CCNr = strsub(x, 1, 2)
DirMake(Verzeichnis) ;Verzeichnis wird erstellt
DirChange(Verzeichnis) ;Es wird ins neu erstellte Verzeichnis gewechselt
FirstTime = 9
endif
else
if strsub(x, 20, 5) == "=====" then ;Sucht nach ==== im file
if NewFileStatus != 0 then ; Wenn ==== nicht gefunden wird, soll das file geschlossen werden
FileClose(NewFile) ;File Schliessen
endif
FileName=strsub(x, 1, 17) ;Jede einzelne rechnung wird mit der entsprechenden 17 stelligen Rechnungsnummer gespeichert.
FileName = strCat("F", CCNr, FileName) ;bei jedem File wird noch ein "F" und die CC Nummer angefügt.
NewFile = FileOpen(FileName, "WRITE") ;das neue File wird geschrieben
NewFileStatus = 9
else
if NewFileStatus == 9 then
FileWrite(NewFile, x)
endif
endif
endif
x = FileRead(handle)
endif
endwhile

if NewFileStatus == 9 then
FileClose(NewFile)
endif
FileClose(handle)

bei Antwort benachrichtigen