Lesen / Ändern Textdatei

Hallo,

ich möchte für meine Arbeitsstelle ein Makro erstellen (wahrscheinlich in Word) mit denen ich über eine UserForm auf eine Textdatei zugreifen möchte.

In dieser Textdatei befindet sich eine „Tabelle“, welche immer weiter gefüllt wird; vorn eine fortlaufende Nummer. Die Tabelle beinhaltet zwei Bereiche: den „Eingang“ und die „Erledigung“.
Die Tabelle wird wie folgt gehandhabt: Habe ich einen „Eingang“ soll er mir eine neue (fortlaufende) Nummer anzeigen, ich gebe das Datum ein (meist „heute“), noch einen Wert und - speichern und fertig. Später möchte ich diese (fortlaufende) Nummer erneut aufrufen können (er zeigt mir den „Eingang“ von dieser Nummer dann an) und jetzt speichere ich dazu die „Erledigung“. In einigen Fällen kann ich „Eingang“ und „Erledigung“ auch gleich im selben Arbeitsschritt eingeben.

Die Tabelle beinhaltet also mit der Zeit hunderte von Zeilen, wo in einigen nur der vordere Bereich (Eingang) ausgefüllt ist und in immer mehr Zeilen wird dann später der hintere Bereich (Erledigung) dazu ausgefüllt.

Nun habe ich folgendes Problem:

  1. Soweit ich mich erinnere kann ich in einer Txt-Datei nur alles komplett neu schreiben (und nicht sagen: „ergänze zu Zeile 100 jetzt die Erledigung“). Ist dies richtig oder kann man das doch tun mit dem „Ergänzen einer halben Zeile“?

  2. Auf die Text-Datei sollen mehrere Mitarbeiter zugreifen können (bis 5 oder 6). Nun ist das Problem eine „richtige“ fortlaufende Nummer zu generieren, da ja alle auf diese Datei zugreifen können. Ich kann ja nicht einfach sagen "nimm die letzte fortlaufende Nummer, ergänze um 1 und das ist jetzt „deine“ Nummer. Es könnte ja sein dass auch ein anderer inzwischen auch auf die Datei zugreifen möchte und das Programm diesem Mitarbeiter ebenso diese Nummer reservieren möchte.
    Von daher habe ich schon überlegt die neue Nummer (im Gegensatz zu meinem theoretischen Beispiel oben) erst zu generieren wenn der Datensatz auch tatsächlich gespeichert wird. Aber auch hier könnte es sein dass zufällig zwei oder mehr Mitarbeiter im selben Moment die Daten speichern möchten. Kann man das irgendwie verhindern? Bin mir nicht sicher ob man das rausbekommt ob gerade ein Schreibzugriff auf die Datei erfolgt. Dann könnte man sagen: „wenn Schreibzugriff, dann warte mal ne Sekunde und versuche es erneut“ oder so? Oder über ne Ini-Datei wo alle Mitarbeiter gelistet sind welche zZ mit dem Programm arbeiten und sobald einer speichert erscheint dort ne „2“ und sobald der Speicherzugriff beendet ist wechselt er wieder zu „1“ (und darüber könnte man das dann auslesen)? Ist das eine (gute) Idee oder denke ich zu kompliert *g*?

LG Tobi@s

Grüezi Tobi@s

ich möchte für meine Arbeitsstelle ein Makro erstellen
(wahrscheinlich in Word) mit denen ich über eine UserForm auf
eine Textdatei zugreifen möchte.

Warum mit Word, warum nicht in Excel - das ist so schön Tabellen-orientiert… :wink:

In dieser Textdatei befindet sich eine „Tabelle“, welche immer
weiter gefüllt wird; vorn eine fortlaufende Nummer. Die
Tabelle beinhaltet zwei Bereiche: den „Eingang“ und die
„Erledigung“.

Da musst Du noch definieren wie sich die Bereiche definieren, resp. abtrennen.
Am einfachsten wäre das über ein Trennzeichen möglich, das zwischen die einzelnen Bereiche gesetzt wird. In Excel kann dieses dann gleich vewendet werden um die Bereiche in einzelne Spalten zu schreiben.

Die Tabelle wird wie folgt gehandhabt: Habe ich einen
„Eingang“ soll er mir eine neue (fortlaufende) Nummer
anzeigen, ich gebe das Datum ein (meist „heute“), noch einen
Wert und - speichern und fertig. Später möchte ich diese
(fortlaufende) Nummer erneut aufrufen können (er zeigt mir den
„Eingang“ von dieser Nummer dann an) und jetzt speichere ich
dazu die „Erledigung“. In einigen Fällen kann ich „Eingang“
und „Erledigung“ auch gleich im selben Arbeitsschritt
eingeben.

Das könnte man beim Schreiben der Zeile erledigen und die neuen Daten unten einfach anhängen.

  1. Soweit ich mich erinnere kann ich in einer Txt-Datei nur
    alles komplett neu schreiben (und nicht sagen: „ergänze zu
    Zeile 100 jetzt die Erledigung“). Ist dies richtig oder kann
    man das doch tun mit dem „Ergänzen einer halben Zeile“?

Du musst die Text-Datei ja eh einlesen um damit arbeiten zu können, dann kannst Du sie auch gleich in einem Rutsch wieder schreiben - das geht so schnell, dass Du das kaum bemerkst.

  1. Auf die Text-Datei sollen mehrere Mitarbeiter zugreifen
    können (bis 5 oder 6). Nun ist das Problem eine „richtige“
    fortlaufende Nummer zu generieren, da ja alle auf diese Datei
    zugreifen können. Ich kann ja nicht einfach sagen "nimm die
    letzte fortlaufende Nummer, ergänze um 1 und das ist jetzt
    „deine“ Nummer. Es könnte ja sein dass auch ein anderer
    inzwischen auch auf die Datei zugreifen möchte und das
    Programm diesem Mitarbeiter ebenso diese Nummer reservieren
    möchte.

Das könnte man beim Zugriff auf die Datei prüfen - ist sie von jemand anderem geöffnet geht halt im Moment nichts und man versucht es nach einer kurzen Weile erneut.

Von daher habe ich schon überlegt die neue Nummer (im
Gegensatz zu meinem theoretischen Beispiel oben) erst zu
generieren wenn der Datensatz auch tatsächlich gespeichert
wird.

Ja, das würde ich auch so sehen.

Aber auch hier könnte es sein dass zufällig zwei oder
mehr Mitarbeiter im selben Moment die Daten speichern möchten.
Kann man das irgendwie verhindern? Bin mir nicht sicher ob man
das rausbekommt ob gerade ein Schreibzugriff auf die Datei
erfolgt. Dann könnte man sagen: „wenn Schreibzugriff, dann
warte mal ne Sekunde und versuche es erneut“ oder so?

Ja so in etwa - wobei ein einzelner die Datei in aller Regel nicht lange geöffnet hat, wenn nur geschrieben wird wenn neue Daten hinzukommen oder welche geändert werden.

Das Ganze könnte so durchaus klappen.

…aber warum denn nicht gleich mit einer kleinen Datenbank?
Die könnte auch die Zugriffsrechte gleich sauber verwalten…

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Tobi@s

ich möchte für meine Arbeitsstelle ein Makro erstellen
(wahrscheinlich in Word) mit denen ich über eine UserForm auf
eine Textdatei zugreifen möchte.

Warum mit Word, warum nicht in Excel - das ist so schön
Tabellen-orientiert… :wink:

Mit Word arbeiten fast alle Mitarbeiter, mit Excel recht wenige (somit auch die Kenntnisse entsprechend). Word ist also fast ständig „offen“, es ist also leichter eine UserForm dort zu integrieren.
Wichtig ist mir dass ich nicht „direkt“ in Word/Excel arbeite (da manche Mitarbeiter vergessen die Datei zu schließen und kein anderer kann dann schreiben etc.).

In dieser Textdatei befindet sich eine „Tabelle“, welche immer
weiter gefüllt wird; vorn eine fortlaufende Nummer. Die
Tabelle beinhaltet zwei Bereiche: den „Eingang“ und die
„Erledigung“.

Da musst Du noch definieren wie sich die Bereiche definieren,
resp. abtrennen.
Am einfachsten wäre das über ein Trennzeichen möglich, das
zwischen die einzelnen Bereiche gesetzt wird. In Excel kann
dieses dann gleich vewendet werden um die Bereiche in einzelne
Spalten zu schreiben.

Bin gerade am überlegen ob ich (im Hintergrund) doch eine Excel-Tabelle nutze. Da ist das lesen / schreiben dann wahrscheinlich einfacher als über txt-Datei.

Die Tabelle wird wie folgt gehandhabt: Habe ich einen
„Eingang“ soll er mir eine neue (fortlaufende) Nummer
anzeigen, ich gebe das Datum ein (meist „heute“), noch einen
Wert und - speichern und fertig. Später möchte ich diese
(fortlaufende) Nummer erneut aufrufen können (er zeigt mir den
„Eingang“ von dieser Nummer dann an) und jetzt speichere ich
dazu die „Erledigung“. In einigen Fällen kann ich „Eingang“
und „Erledigung“ auch gleich im selben Arbeitsschritt
eingeben.

Das könnte man beim Schreiben der Zeile erledigen und die
neuen Daten unten einfach anhängen.

  1. Soweit ich mich erinnere kann ich in einer Txt-Datei nur
    alles komplett neu schreiben (und nicht sagen: „ergänze zu
    Zeile 100 jetzt die Erledigung“). Ist dies richtig oder kann
    man das doch tun mit dem „Ergänzen einer halben Zeile“?

Du musst die Text-Datei ja eh einlesen um damit arbeiten zu
können, dann kannst Du sie auch gleich in einem Rutsch wieder
schreiben - das geht so schnell, dass Du das kaum bemerkst.

Ok, so gesehen … hatte erst nur vor den einen Datensatz dann einzulesen / zu schreiben.

  1. Auf die Text-Datei sollen mehrere Mitarbeiter zugreifen
    können (bis 5 oder 6). Nun ist das Problem eine „richtige“
    fortlaufende Nummer zu generieren, da ja alle auf diese Datei
    zugreifen können. Ich kann ja nicht einfach sagen "nimm die
    letzte fortlaufende Nummer, ergänze um 1 und das ist jetzt
    „deine“ Nummer. Es könnte ja sein dass auch ein anderer
    inzwischen auch auf die Datei zugreifen möchte und das
    Programm diesem Mitarbeiter ebenso diese Nummer reservieren
    möchte.

Das könnte man beim Zugriff auf die Datei prüfen - ist sie von
jemand anderem geöffnet geht halt im Moment nichts und man
versucht es nach einer kurzen Weile erneut.

Von daher habe ich schon überlegt die neue Nummer (im
Gegensatz zu meinem theoretischen Beispiel oben) erst zu
generieren wenn der Datensatz auch tatsächlich gespeichert
wird.

Ja, das würde ich auch so sehen.

Aber auch hier könnte es sein dass zufällig zwei oder
mehr Mitarbeiter im selben Moment die Daten speichern möchten.
Kann man das irgendwie verhindern? Bin mir nicht sicher ob man
das rausbekommt ob gerade ein Schreibzugriff auf die Datei
erfolgt. Dann könnte man sagen: „wenn Schreibzugriff, dann
warte mal ne Sekunde und versuche es erneut“ oder so?

Ja so in etwa - wobei ein einzelner die Datei in aller Regel
nicht lange geöffnet hat, wenn nur geschrieben wird wenn neue
Daten hinzukommen oder welche geändert werden.

Das Ganze könnte so durchaus klappen.

…aber warum denn nicht gleich mit einer kleinen Datenbank?
Die könnte auch die Zugriffsrechte gleich sauber verwalten…

Datenbanken hat keiner auf Arbeit (bin froh wenn ich in Word / Excel arbeiten kann) in meiner Gehaltsgruppe *g*. Somit sind auch meine Kenntnisse in diesem Gebiet = 0. Aber über Word / Excel krieg ich das auch hin :smile:

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Danke.
MfG
Tobi@s

Guten Tag Tobi@s,

Mit Word arbeiten fast alle Mitarbeiter, mit Excel recht
wenige (somit auch die Kenntnisse entsprechend). Word ist also
fast ständig „offen“, es ist also leichter eine UserForm dort
zu integrieren.
Wichtig ist mir dass ich nicht „direkt“ in Word/Excel arbeite
(da manche Mitarbeiter vergessen die Datei zu schließen und
kein anderer kann dann schreiben etc.).

.ich würde auch mit Excel schreiben.

Bin gerade am überlegen ob ich (im Hintergrund) doch eine
Excel-Tabelle nutze. Da ist das lesen / schreiben dann
wahrscheinlich einfacher als über txt-Datei.

  1. Auf die Text-Datei sollen mehrere Mitarbeiter zugreifen
    können (bis 5 oder 6). Nun ist das Problem eine „richtige“
    fortlaufende Nummer zu generieren, da ja alle auf diese Datei
    zugreifen können. Ich kann ja nicht einfach sagen "nimm die
    letzte fortlaufende Nummer, ergänze um 1 und das ist jetzt
    „deine“ Nummer. Es könnte ja sein dass auch ein anderer
    inzwischen auch auf die Datei zugreifen möchte und das
    Programm diesem Mitarbeiter ebenso diese Nummer reservieren
    möchte.

Das könnte man beim Zugriff auf die Datei prüfen - ist sie von
jemand anderem geöffnet geht halt im Moment nichts und man
versucht es nach einer kurzen Weile erneut.

Von daher habe ich schon überlegt die neue Nummer (im
Gegensatz zu meinem theoretischen Beispiel oben) erst zu
generieren wenn der Datensatz auch tatsächlich gespeichert
wird.

Ja, das würde ich auch so sehen.

Aber auch hier könnte es sein dass zufällig zwei oder
mehr Mitarbeiter im selben Moment die Daten speichern möchten.
Kann man das irgendwie verhindern? Bin mir nicht sicher ob man
das rausbekommt ob gerade ein Schreibzugriff auf die Datei
erfolgt. Dann könnte man sagen: „wenn Schreibzugriff, dann
warte mal ne Sekunde und versuche es erneut“ oder so?

Ja so in etwa - wobei ein einzelner die Datei in aller Regel
nicht lange geöffnet hat, wenn nur geschrieben wird wenn neue
Daten hinzukommen oder welche geändert werden.

Das Ganze könnte so durchaus klappen.

.ich würde 2 txt Dateien erstellen

  1. mit den Daten
  2. mit reservierten Nummern und den Nr. die gerade in Bearbeitung sind!
    (also: zuerst liest der script nur die reserv.Datei und notiert rein einen neue Nummer;
    danach können die Mitarbeiter sich in ruhe das Datum und den Eingang schreiben;
    falls es nich möglich ist gerade in dieser microsekunde zu reservieren versucht der script es in
    kürze nochmal; so kommen die beide Parteien nich in konflickt; die nur Änderungen machen und die, die
    Neue Einträge machen.)
    zum schluß wird der Reservierungseintrag gelöscht (man sollte natürlich eine PflegeRoutiene einbauen die alte Reservierungen löscht
    falls Fehler aufgetretten sind etc :frowning:) …

…aber warum denn nicht gleich mit einer kleinen Datenbank?
Die könnte auch die Zugriffsrechte gleich sauber verwalten…

Datenbanken hat keiner auf Arbeit (bin froh wenn ich in Word /
Excel arbeiten kann) in meiner Gehaltsgruppe *g*. Somit sind
auch meine Kenntnisse in diesem Gebiet = 0. Aber über Word /
Excel krieg ich das auch hin :smile:

… Datenbank kann man erstellen und bearbeiten auch mit Excel …

MfG Alex

Moin moin,

Das könnte man beim Schreiben der Zeile erledigen und die
neuen Daten unten einfach anhängen.

  1. Soweit ich mich erinnere kann ich in einer Txt-Datei nur
    alles komplett neu schreiben (und nicht sagen: " ergänze zu
    Zeile 100 jetzt die Erledigung"). Ist dies richtig oder kann
    man das doch tun mit dem „Ergänzen einer halben Zeile“?

Moin,

Du musst die Text-Datei ja eh einlesen um damit arbeiten zu

ja aber …

können, dann kannst Du sie auch gleich in einem Rutsch wieder
schreiben - das geht so schnell, dass Du das kaum bemerkst.

doch ein anderer thread der gerade das alte gelesen hat verarbeitet und auch wieder komplett schreibt . Also ohne sperrdatei etc :frowning: gehts nicht. Problem los . Irgendwie muss das Atom Lesenuser1 schreibenuser1 nicht kollidieren mit lesenuser2 schreibenuser2 . lesenuser1 lesenuser2 schreibenuser1 schreibenuser2 .

da ist anhängen weniger das problem .