Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 11.09.03 - 11:38:09
-
Hi Folks,
ich möchte eine Datei öffnen, sie um die 2. und 3. Zeile kürzen und dann in eine andere Datei wegschreiben.
Ich habe Probleme mit dem
fileNum1 = Freefile()
fileNum2 = Freefile()
Die Werte für fileNum1 und fileNum2 sind beide 1 onwohl
der für fileNum2 eigentlich 2 sein müßte.
Jemand eine Idee ?
Ciao
Don Pasquale
Dim sFile As String ' SOURCE
Dim dFile As String ' DESTINATION
Dim sRow() As String
Dim sTxt As String
Dim fileNum1 As Integer
Dim fileNum2 As Integer
Dim counter As Integer
' # Die Datei zuweisen und öffnen...
sFile = cPath & nDoc.UniversalID & ".xml"
dFile = cPath & "__" & nDoc.UniversalID & ".xml"
fileNum1 = Freefile()
fileNum2 = Freefile()
Open sFile For Input As fileNum1
Open dFile For Output As fileNum2
' # ... zeilenweise einlesen
counter = -1
Do While Not Eof( fileNum1 ) ' # ... EOF = End Of File
Line Input #fileNum1, sTxt
counter = counter + 1
Redim Preserve sRow( 0 To counter )
sRow( counter ) = sTxt
If ( counter <> 2 Or counter <> 3 ) Then
Print #fileNum2 , sRow( counter )
End If
Loop
' # ... das Array weiterverarbeiten...
' # Die Datei wieder schließen...
Close fileNum1
Close fileNum2
Wend
-
... bestimme die Laufzahl manuell, indem du eine fixe Zahl vergibst - ist zwar nicht ganz sauber, aber hilft zuweilen
ata
-
FileNum muß ja auch immer den gleichen Wert ergeben, da danach kein File geöffnet (und damit belegt) wird.
Versuch' mal, nach FreeFile gleich das Open folgen zu lassen.
Bernhard
-
... da habe ich gar nicht darauf geachtet...
... ich verwende Freefile eigentlich nur, wenn ich mehrere Files in einer Schlaufe öffnen muß...
ata
-
@koehlerbv
BINGO !
Anton und Bernhard :
Herzlichen Dank
Ciao
Don Paquale
-
Was jetzt noch cool wäre wenn man aus der Source Datei jede Zeile raußnimmt .
sprich in der schleife nachdem in neue Datei die Zeile geschrieben ist -> diese Zeile aus Source ( alter Datei löschen ) ?! ;) ???
-
Manomann, das hatten wir Dir jetzt schon mehrfach gesagt: Das geht bei sequentiellen Files nicht.
-
und wie wäre ein Beispiele bei einer Random Datei ? ??? ;)
-
Auch das wurde bereits erläutert - diese erfordern fixed length records und diese lassen sich dann bestenfalls überschreiben, aber nicht löschen.
Sag doch lieber mal an, was Du da überhaupt anstellen willst. Vielleicht findet sich dann eher eine Lösung als bei diesem Herumstochern.
Bernhard
-
nun ja man könnte ja die zeile überschreiben mit nichts sozusagen so das sie leer ist ..
Ich habe eine Datei. Die Daten werden Zeile für Zeile ausgelesen und in einem Agent Zeile nach Zeile verarbeitet.
Sprich : 1. Zeile wird ausgelesen , dann verarbeitet , dann in neue datei geschrieben . So das klappt alles jetzt müßte eigentlich nur noch zum schluss die Zeile in der alten datei gelöscht werden oder überschrieben werden mit "Nichts" sozusagen sprich nachdem zeile in neue datei geschrieben wurde zeile in alter datei überschreiben / löschen .
-
Ich gebe es auf ...
-
Hi,
also wenn Datei1 dein Original ist und Datei2, das Ergebnis deines Agenten, dann laß den Agenten doch noch eine Datei3 erstellen, in dem du nur die Zeilen aus Datei1 nimmst, die erhalten bleiben sollen, und lösche zum Schluß Datei1 und benenne Datei3 in Datei1 um.
Oder wenn du weißt das alles aus Datei1 gelöscht werden soll, dann lösch sie, sobald dein Agent fertig ist.
s.
-
Sprich : 1. Zeile wird ausgelesen , dann verarbeitet , dann in neue datei geschrieben . So das klappt alles jetzt müßte eigentlich nur noch zum schluss die Zeile in der alten datei gelöscht werden oder überschrieben werden mit "Nichts" sozusagen sprich nachdem zeile in neue datei geschrieben wurde zeile in alter datei überschreiben / löschen .
Hi,
ich verstehe immer noch nicht, warum die verarbeitete Zeile aus Datei1 gelöscht werden soll. Erklär das mal genauer.
Es gibt eine einfache Lösung für das Problem: da der Agent die alle Zeilen in Datei1 verarbeitet, dann lösch doch einfach die Datei nach Abarbeitung aller Zeilen.
Axel
-
also der Hintergrund ist der : In der Datei stehen z.B. 1000 Telnummern drin die in Datenbank per Agent eingelesen werden sollen.
Wenn nun sagen wir mal nach dem 500ersten Datensatz etwas abkackt und man von vorn anfangen muss wäre es doch blöd erst die ersten 500 Datensätze die schon in Datenbank sind nochmal einzufügen .
man könnte also jede Zeile nach und nach raußlöschen.
das ist der Hintergrund..
so ist halt die Anfrage und der Wunsch das es so läuft ...
Tips und Tricks freu ich mich drüber
-
a) wie gross ist denn die Chance, dass etwas schief läuft?
b) wie lange gurgelt denn das Ding an der Handvoll Datensätze?
-
Hi,
das Ganze bezieht sich doch auf diesen Thread (http://www.atnotes.de/index.php?topic=23515.0), oder?
Meines Erachtens sollte die Diskussion dort weitergeführt werden. DEshalb findest du meine Antwort dort.
Axel
-
wie sieht es aus, wenn ich z.b 3 textdateie habe und nur jeweils die erste zweile auslesen möchte? vllt als kontrolle für mich, die ausgabe per msgbox ? wie sieht der quelltext aus ?
-
Schau Dir mal das Beispiel in der Hilfe zu Line Input an, dann bekommst Du den Rest auch hin.
-
Sub Initialize
Dim filename As String
Dim PathFilename As String
Dim filenum As Integer
Dim i As String
PathName$ = "E:\TestKUR\Attachements\*.txt"
Filename$ = Dir$(PathName$, 0)
Do While Filename$ <> ""
If Isempty(Filename$) Then
Exit Sub
End If
Msgbox Filename$
'lese erste zeile
Open Filename$ For Input As filenum
Seek fileNum,1
Line Input #filenum, i
Filename$ = Dir$()
Loop
End Sub
jetzt hab ich es so, da kommt eine fehlermeldung --> illegal Filenumber ..... wieso ist es nicht gültig?
-
Du solltest die Datei nach dem Einlesen auch wieder schließen (Close #filenum)
-
Das gehört doch mit Sicherheit zu diesem Posting (http://atnotes.de/index.php/topic,41952.msg312531.html#msg312531). Oder liege ich da falsch ?
Bitte nicht alte Threads wieder aufwärmen. Erstelle lieber ein neues und wenn notwendig füge einen Link auf das entsprechende Posting ein. Bitte auch nur in dem, der Version mit der du arbeitest, entsprechenden Forum posten.
Danke.
Axel