PDA

Vollständige Version anzeigen : Textdatei erstellen mit bestimmten Vorgaben


EDV-Stelle
30.10.2011, 18:00
Hallo zusammen!

Ich stehe für mich vor einer Mammutaufgabe :) Auch nach etwas stöbern im Forum habe ich keinen Ansatz gefunden, um es für mich zu lösen.

In meinem VBA-Code habe ich etliche Varialen deklariert, so dass die Felder schon passend für meine Textausgabe sind.

Beispiel:

Dim Name as String
Dim Vorname as String
...

Name = Me!txt_Name
Vorname = Me!txt_Vorname
...

Jetzt möchte ich mit speziellen Vorgaben für die Textdatei diese Variabeln exportieren. Der Aufbau der Textdatei soll folgendermaßen aussehen:

Position 1 bis Position 30 > Name
Positon 31 bis 40 > blank (Leerzeichen)
Pos. 41 bis 70 > Vorname
...

Das ganze geht bis 444 Zeichen je Zeile!

Nachdem ein Datensatz exportiert wurde, solle ein weiterer 444 Zeichen langer Datensatz in die Textdatei geschrieben werden, aber mit anders deklarierten Variabeln.

Position 1 bis Pos. 10 > Aktenzeichen
....

Danach geht das ganze wieder von vorne los!!!, bis alle Datensätze aus einer Abfrage oder anhand einer definierten Bedingung exportiert sind.

Aus diesen ganzen Sachen stellen sich die Fragen für mich:

1. wie realisiere ich das?

2. wie fange ich an eine Textdatei zu erstellen?

3. wie kann ich in diesem Zusammenhang noch ein Befehl einbringen, dass mir ein Laufwerk gemappt wird (net use ...), wo die Textdatei abgelegt werden soll (später net use /delete)

4. wie sage ich den Variabeln, a fängt bei Position 1 an und geht bis 30, b fängt dann ab 31 an, etc... Wenn eine Variable dann mehr als die verfügbaren Zeichen hat, soll das Feld abgeschnitten werden.

5. wie füge ich blanks (Leerzeichen) ein?

6. wie mache ich einen Zeilen, Datensatzwechsel und fange dann wie in einer Schleife von vorne an?



7. weitergehend soll geprüft werden, ob schon eine Textdatei von einem früheren Export vorliegt, wenn nein, dann soll eine ganz neue Textdatei angefangen werden. Wenn eine Textdatei noch vorhanden ist, soll am Ende der Textdatei die o.g. Daten weiter angefügt werden.



Hoffe, jemand kann diese Frage(n) beantworten oder mir einen Beitrag / Seite nennen, wo ich all diese Fragen mir selber durch nachlesen beantworten kann (für Anfänger :))

Danke, Grüße Ralf

ebs17
30.10.2011, 19:11
Siehe es mal so: Eine Textdatei enthält Text (= Zeichenkette, = String).
Erstelle also einen String nach Deinen Vorgaben und schreibe (http://vb-tec.de/speicher.htm) ihn in eine Datei.
Zum Anfügen siehst Du Dir die Methode Append an.

Einen String kann man stückweise zusammensetzen:
MyString = "Phase1"
MyString = MyString & vbCrLf & "Phase2 " & "mal was anderes" & " Phase3"
Debug.Print MyString

4+5) Bei Texten kann man Textverarbeitung verwenden: String, Mid u.a.
7) Wenn Pfad und Dateiname bekannt: Prüfung mit Dir

Lanz Rudolf
30.10.2011, 19:19
Hallo
ich würde Felder nie den Namen "Name" geben
eine sequntiele TextDate erstellen

Lies Hier:
http://dl.dropbox.com/u/46590638/ACC/ACCESS%202000BU%20%20Begleitunterlage.pdf
zu Name S: 26
zu text Datei s: 109
auch den Hinweis Von Eberhart Befolgen.

Louisleon
31.10.2011, 06:58
Hallo Ralf,

wenn das eine Mammutaufgabe ist, ist dein Nick wohl nicht Programm;)

So wie ich Dich verstanden habe möchtest Du eine strukturierte Textdatei erstellen in welcher Felder fester Länge vorkommen.
Der Aufbau soll nach dem Schema DS = Kopfsatz- u. Positionsdatensatz/sätze erfolgen.
Die Kopf- und Positionssätze ermittelst Du über Abfragen.

Ich würde Dir die gute alte "OPEN"-Methode zum erstellen der Textdatei empfehlen.
Die Deklaration der "festen" Felder nimmst Du wie folgt vor:
Dim NachName as String * 30
Aktenzeichen as String * 30
Dann eröffnest Du Deine Recordsets basierend auf den Abfragen

strSQL = "SELECT ...;" ' Abfrage für Kopsätze
strSQL1 = "SELECT ...;" ' Abfrage für Positionen

Set rsKopf = CurrentDb.OpenRecordset(strSQL)
Set rsPos = CurrentDb.OpenRecordset(strSQL1)

Dann durchläufst Du die Recordsets (im Kopfsatz sollte nur ein Datensatz stehen, daher könnte man sich einen Loop sparen)

'Feldtrenner definieren
myDeli = "|"
Do Until rsKopf.EOF
VorName = rs!Feld1
NachName = rs!Feld2
...
Print #1, VorName & myDeli & NachName & myDeli & ...
rsKopf.MoveNext
' Hier werden die Zugehörigen Positionen geschrieben
Do Until rsPos.EOF
Aktenzeichen = rsPos!Field1
.....
Print #1, Aktenzeichen & myDeli & .....
Loop
Loop
Close #1


HTH

Gruß

LL