PDA

Vollständige Version anzeigen : Textdatei füllen!


nic
14.02.2003, 09:50
Hallo!
Ich möchte von einem Formular aus Daten in eine Textdatei schreiben.
Diese Textdatei ist eine Vorlage mit Platzhaltern!
z.B.: Feld Kurzbeschreibung soll in der Textdatei auf den Platz
Nun möchte ich die Daten genau an ihren vorhergesehenen Platz schreiben.
Nun habe ich es mit einem Scripting.FileSystemObject probiert, blicke aber bei Tag/Marke - Eigenschaft nicht ganz durch!
Dim FSO As New Scripting.FileSystemObject, S As Scripting.TextStream, T As String, Ctl As Control
Const FName = "C:\vorlage.txt"
Set S = FSO.OpenTextFile(FName, ForReading)
T = S.ReadAll
S.Close
For Each Ctl In Me.Controls
If Ctl.Tag = "Kurzbeschreibung" Then
T = Replace(T, Ctl.Tag, Ctl.Value)
End If
Next Ctl
Set S = FSO.OpenTextFile(FName, ForWriting, True)
S.Write T
S.Close
Set FSO = Nothing
Bekomme als Fehlermeldung:
Einlesen hinter Dateiende!
Danke
Nicole

GroßerMeister
14.02.2003, 12:04
hallo nicole,
mir fallen da noch 2 andere Möglichkeiten ein:

1.
Open Pfad For Input as #1
close #1
bzw.
Open Pfad For Output as #1
close #1

2. der Befehl:
docmd.transfertext
:cool:

nic
14.02.2003, 12:45
Danke!
Weiß wer wie ich die Vorlage dann als nic.def abspeichern kann, so das er es nicht direkt in die Vorlage schreibt?
Danke
Nicole

GroßerMeister
14.02.2003, 12:52
moment

A.S.
14.02.2003, 12:56
@Großer Meister,

guten Morgen, nicht ausgeschlafen oder zu Müde zum Lesen dessen worauf Du antwortest?? ;) ;)

@Nic,

Du kannst Deine Vorlage doch selbst per Explorer umspeichern und dann über "Open .... For Input...." öffnen, innerhalb einer Schleife Zeilenweise einlesen, weiterverarbeiten und in die entsprechend per "Open ... For Output...." geöffnete Zieldatei wegschreiben....

Gruß

Arno

Alexander Jan Peters
14.02.2003, 12:57
<div>Hallo,

einfach mit FileCopy oder Copy eine Kopie machen und die dann ändern:
<a href="http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=85754&highlight=filecopy">Datei kopieren</a>.

Gruß

Alex</div>

GroßerMeister
14.02.2003, 12:59
ja genau! :)

nic
14.02.2003, 13:13
Danke!
strOldFilename = "C:\vorlage.def"
strNewFilename = "UO1" & "\" & "module.def"
CopyFile strOldFilename, strNewFilename

Ich bekomme hier als Fehlermeldung:
Sub oder Function nicht definiert!

Nicole

A.S.
14.02.2003, 13:14
nicht CopyFile sondern FileCopy

Alexander Jan Peters
14.02.2003, 13:26
<div>@ Arno,

in dem von mir verlinkten Beitrag war der Fehler drin, es war dort eigentlich COPY gemeint, der DOS-Befehl:

Kopiert eine oder mehrere Dateien an eine andere Position.

COPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B] Quelle [/A | /B]
[+ Quelle [/A | /B] [+ ...]]
[Ziel [/A | /B]]

Gruß

Alex</div>

nic
14.02.2003, 13:43
Wie ich einlesen kann ist mir klar mit Schleife und so, aber wie kann ich genau dort wo das Wort steht meine Daten hinschreiben!
z.B.: Modulname steht in der Vorlage und dort soll der interne_Modulname aus dem Formular!
Danke
Nicole

Nouba
14.02.2003, 13:55
Hallo nic,

zeige doch bitte mal einen Ausschnitt eines Templates, damit klar wird, was Du ersetzen willst. Im Allgemeinen ist es gut, einen Platzhalter in der Vorlage in Zeichen zu setzten, die dort nicht verwendet werden.

z.B: bla bla bla %MeinTag% vbn mvmn #OderEinAnderer#

A.S.
14.02.2003, 13:56
Angenommen Du speicherst die jeweilige Zeile in der Variable strZeile und suchst mit InStr() nach dem jeweiligen Schlüsselfeld in der Zeile, dann ersetzt Du dieses mittels Replace() (ab A00 verfügbar AFAIK, für A97 schwirren hier im Forum ein paar Codings rum) wenn die InStr()-Funktion > 0 liefert.

Gruß

Arno

nic
14.02.2003, 13:59
Hallo Nouba!
Da ist mein template:
#------------------------------------------------------------------------------
#
# mbH
#
# Modulkurzbeschreibung
#
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
## Module : modulname
##
## Author : Entwickler
##
## Date : Datum
#------------------------------------------------------------------------------

modulname modulversion

description
Modulbeschreibung für software_component_menu
end

requires
modul 1 Version des Moduls 1
modul 2 Version des Moduls 2
end

case_installation
end

style_installation
end

system_installation
end

auth_installation
end
z.B.:Modulkurzbeschreibung, Entwickler, datum, modulname usw......
LG
Nicole

Nouba
14.02.2003, 16:52
Hallo nic,

im Prinzip ist Dein Koding passend gewesen. Um es etwas flexibler zu halten, habe ich es als Public Prozedur (für ein global Modul) umgeschrieben, wo der neue Pfadname als Parameter übergeben wird. Siehe auch Kommentare im Koding.

<pre><font face="Courier New, Courier, monospace" size="3">'<br>' Aufruf Beispiel aus Formular<br>'<br>' Const strcVortlage = "C:\tmp\vorlage.txt"<br>' Const strcDateiName As String = "C:\tmp\moduleXYZ.def"<br>'<br>' SchreibeModule strcVorlage, strcDateiName, Me<br>'<br>Public Sub SchreibeModule( _<br> strVorlage As String, _<br> strZielPfad As String, _<br> objForm As Form)<br> <br> Dim objFSO As Scripting.FileSystemObject<br> Dim objStream As Scripting.TextStream<br> Dim strGanzerText As String<br> Dim Ctl As Control<br><br> ' Instanz des FileSystemObjects erzeugen<br> Set objFSO = New Scripting.FileSystemObject<br><br> ' Textstream öffnen<br> Set objStream = objFSO.OpenTextFile(strVorlage, ForReading)<br><br> ' ganzer Inhalt auslesen<br> strGanzerText = objStream.ReadAll<br><br> ' Textstream schließen<br> objStream.Close<br><br> ' für alle Steuerelemente<br> ' hier kann verbessert werden<br> ' wenn Tags nicht anderweitig verwendet werden<br> ' müßte nur geprüft werden, ob ein Tag vorhanden ist<br> ' oder nimm irgendwas zur Unterscheidung<br> ' dann könnte die *Kurzbeschreibung* raus - sonst hast Du<br> ' schnell Spaghetti :)<br> '<br> For Each Ctl In objForm.Controls<br> If Ctl.Tag = "Kurzbeschreibung" Then<br> strGanzerText = Replace(strGanzerText, Ctl.Tag, Ctl.Value)<br> End If<br> Next Ctl<br><br> ' Stream zum Schreiben öffnen<br> Set objStream = objFSO.OpenTextFile(strZielPfad, ForWriting, True)<br><br> ' Text zurückschreiben<br> objStream.Write strGanzerText<br><br> ' Textstream schließen<br> objStream.Close<br><br> ' Speicher freigeben<br> Set objFSO = Nothing<br>End Sub</font></pre>

nic
17.02.2003, 10:09
Danke Nouba!
LG
Nicole