Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
960to964
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arbeiten mit .txt Dateien im Netzwerk

Arbeiten mit .txt Dateien im Netzwerk
19.03.2008 06:51:48
Thomas
Hallo Gemeinde,
es geht um das Arbeiten mit .txt-Dateien.
In einem Netzwerk hat jeder Anwender eine VBA-Anwendung, in der er fast täglich eine Zusammenfassung seiner geleisteten Arbeit verfasst. Diese erhält eine einmalige Vorgangsnummer, gefolgt von den einzelnen Aktivitäten.
Die Vorgangsnummer besteht aus :
- einer 8-stelligen Personalnummer &
- dem heutigigen Datum (190308) &
- einer 14-stelligen Zahl &
- einem „A“
Beispiel : Vorgangsnummer#heute habe ich fast nichts getan#jetzt mache ich Feierabend#
Diese Zusammenfassung hat der Anwender dann in eine .txt-Datei (Gesamt.txt)zu übertragen, in der alle Zusammenfassungen aller Anwender eingetragen werden.
Er hat auch eine eigene .txt-Datei (Eigene.txt), in die seine Zusammenfassung speichern kann.
Jetzt darf es aber nicht sein, dass der gleiche Anwender unter dem gleichen Datum (also Kombination aus Personalnummer und Datum) eine zweite Zusammenfassung überträgt.
Meine Überlegung ist, dass ich beim Übertragen zunächst prüfen muss, ob die Gesamt.txt von einem anderen Anwender geöffnet wurde.
Wenn die Gesamt.txt frei ist, dann durchsuche ich sie nach der Kombination (Personalnummer und Datum) bis zum Ende. Wenn keine Übereinstimmung gefunden wurde, wird die Zusammenfassung mit „Append“ hinten an die Gesamt.txt rangehangen.
Habt ihr dazu eine Idee und eine Routine?
Es soll auch nicht sein, dass die Gesamt.txt zwischen der Prüfung (ob sie frei ist) und dem Durchsuchen geschlossen wird, sonst könnte (theoretisch) in dieser Millisekunde ein Anderer auf die Gesamt.txt zugreifen.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeiten mit .txt Dateien im Netzwerk
19.03.2008 10:37:51
Tino
Hallo,
hättest du eine Beispiel .txt Datei?
Könnte mir dann besser ein Bild von dem machen was du vorhast.
Vielleicht könnte ich mit meinen bescheidenen VBA Kenntnissen dir etwas zusammenbauen.
Gruß
Tino

AW: Arbeiten mit .txt Dateien im Netzwerk
19.03.2008 19:31:00
Thomas
Eine Datei habe ich nicht, da sich diese im firmeninternen Intranet befindet, aber in etwa sieht diese Datei so aus:
2403221412020812345678901234A#hier kommt ein beliebiger Text.....
2343261418030812455678999994A#hier kommt ein beliebiger Text.....
4466621425060812345735401234A#hier kommt ein beliebiger Text.....
..
.
.
.
.

Anzeige
AW: Arbeiten mit .txt Dateien im Netzwerk
19.03.2008 21:24:53
Tino
Hallo,
kannst ja mal testen.
Du musst noch anpassen.
  • Personalnummer

  • 14stellige Nummer + A

  • Text der geschrieben werden soll

  • Den Pfad zur Textdatei

  • Gruß
    Tino
    
    Sub testT()
    Dim strText As String
    Dim lngFn As Long, AnZEinTrag As Long, A As Long
    Dim strPathAndFileName As String
    Dim vntA As Variant
    Dim MeinePersonalNr As String, MeineZahl As String
    Dim MeinTXT As String, NeuerText As String
    Dim Fund As Boolean
    MeinePersonalNr = "44666257" 'Personalnummer
    MeineZahl = "12345735401234A" 'einer 14-stelligen Zahl und ein A
    MeinTXT = "Was ich schon immer mal sagen wollte" 'Mein Text
    'Mein Pfad
    strPathAndFileName = "C:\Neuer Ordner\Text.txt" 'Pfad zur Datei
    Fund = False
    MeinePersonalNr = MeinePersonalNr & Format(Date, "ddmmyy") & MeineZahl
    If Dir$(strPathAndFileName)  "" Then
    lngFn = FreeFile
    Open strPathAndFileName For Binary As lngFn
    strText = Space(LOF(lngFn))
    Get lngFn, 1, strText
    Close lngFn
    'nach dem lesen löschen, kann somit nicht verwendet werden
    Kill (strPathAndFileName)
    AnZEinTrag = CountChar(strText, vbCr)
    vntA = Split(strText, vbCr)
    For A = 0 To AnZEinTrag
    vntA(A) = Replace(vntA(A), vbCr, "")
    vntA(A) = Replace(vntA(A), vbCrLf, "")
    If InStr(vntA(A), MeinePersonalNr) > 0 Then
    vntA(A) = Left$(vntA(A), InStr(vntA(A), "#")) & MeinTXT
    Fund = True
    End If
    NeuerText = NeuerText & vntA(A) & vbCr
    Next A
    If Fund = False Then
    NeuerText = NeuerText & MeinePersonalNr & "#" & MeinTXT & vbCr
    End If
    NeuerText = Left(NeuerText, Len(NeuerText) - 1)
    lngFn = FreeFile
    Open strPathAndFileName For Binary As lngFn
    Put lngFn, 1, NeuerText 'Datei zurückschreiben
    Close lngFn
    Else
    MsgBox "wird gerade verwendet!", vbCritical, "Datei nicht vorhanden!"
    End If
    End Sub
    Function CountChar(ByVal SourceString As String, ByVal strChar As String) As Long
    CountChar = Len(SourceString) - Len(Replace(SourceString, strChar, ""))
    End Function
    


    Anzeige
    AW: Arbeiten mit .txt Dateien im Netzwerk
    22.03.2008 07:00:12
    Thomas
    Danke für Deine Antwort,
    jedoch schließt Du in Deinem Beispiel die Datei in die geschrieben werden soll erst und öffnest sie sofort wieder.
    Das war ja ein Teil meiner Frage, ob dies verhindert werden kann.
    Zugegeben, es ist nur eine Millisekunde, aber trotzdem wäre es möglich,dass genau in dieser Millisekunde ein anderer Mitarbeiter diese Datei öffnet und dann hätte ich ein Problem, denn dann könnte ich nicht mehr in diese Datei schreiben.
    Oder ist es etwa möglich, dass zwei Anwender gleichzeitig in eine Datei schreiben?
    Thomas

    AW: Arbeiten mit .txt Dateien im Netzwerk
    22.03.2008 10:16:00
    Tino
    Hallo,
    diese wird nach dem schließen direkt gelöscht und
    somit kann keiner darauf zugreifen.
    Kill (strPathAndFileName)
    Gruß
    Tino

    Anzeige
    AW: Arbeiten mit .txt Dateien im Netzwerk
    22.03.2008 11:15:25
    Tino
    Hallo,
    aber wen es unbedingt sein muss, hier eine 2. Möglichkeit.
    Die Datei wird vor dem öffnen umbenannt, somit ist die Original währenddessen
    nicht vorhanden und kann somit auch nicht benutzt werden, am Schluss bekommt diese wieder Ihren richtigen Namen.
    
    Sub testT()
    Dim strText As String
    Dim lngFn As Long, AnZEinTrag As Long, A As Long
    Dim strPathAndFileName As String
    Dim vntA As Variant
    Dim MeinePersonalNr As String, MeineZahl As String
    Dim MeinTXT As String, NeuerText As String
    Dim Fund As Boolean
    Dim fso As Object, f1 As Object
    MeinePersonalNr = "44666257" 'Personalnummer
    MeineZahl = "12345735401234A" 'einer 14-stelligen Zahl und ein A
    MeinTXT = "Was ich schon immer mal sagen wollte 2" 'Mein Text
    'Mein Pfad
    strPathAndFileName = "C:\Dokumente und Einstellungen\ts\Eigene Dateien\1 Forum\TextTXT\Text. _
    txt" 'Pfad zur Datei
    Fund = False
    MeinePersonalNr = MeinePersonalNr & Format(Date, "ddmmyy") & MeineZahl
    If Dir$(strPathAndFileName)  "" Then
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.GetFile(strPathAndFileName)
    f1.Move (strPathAndFileName & "besetzt")
    lngFn = FreeFile
    Open strPathAndFileName & "besetzt" For Binary As lngFn
    strText = Space(LOF(lngFn))
    Get lngFn, 1, strText
    Close lngFn
    'nach dem lesen löschen, kann somit nicht verwendet werden
    Kill (strPathAndFileName & "besetzt")
    AnZEinTrag = CountChar(strText, vbCr)
    vntA = Split(strText, vbCr)
    For A = 0 To AnZEinTrag
    If AnZEinTrag = 0 Then Exit For
    vntA(A) = Replace(vntA(A), vbCr, "")
    vntA(A) = Replace(vntA(A), vbCrLf, "")
    vntA(A) = Replace(vntA(A), Chr(10), "")
    vntA(A) = Replace(vntA(A), Chr(13), "")
    If InStr(vntA(A), MeinePersonalNr) > 0 Then
    vntA(A) = Left$(vntA(A), InStr(vntA(A), "#")) & MeinTXT
    Fund = True
    End If
    If vntA(A) > "" Then
    NeuerText = NeuerText & vntA(A) & vbCrLf
    End If
    Next A
    If Fund = False Then
    NeuerText = NeuerText & MeinePersonalNr & "#" & MeinTXT & vbCrLf
    End If
    NeuerText = Left(NeuerText, Len(NeuerText) - 1)
    lngFn = FreeFile
    Open strPathAndFileName & "besetzt" For Binary As lngFn
    Put lngFn, 1, NeuerText 'Datei zurückschreiben
    Close lngFn
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.GetFile(strPathAndFileName & "besetzt")
    f1.Move (strPathAndFileName)
    Set fso = Nothing
    Set f1 = Nothing
    Else
    MsgBox "wird gerade verwendet!", vbCritical, "Datei nicht vorhanden!"
    End If
    End Sub
    Function CountChar(ByVal SourceString As String, ByVal strChar As String) As Long
    CountChar = Len(SourceString) - Len(Replace(SourceString, strChar, ""))
    End Function
    


    Gruß
    Tino

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige