PDA

Vollständige Version anzeigen : Einlesen einer doc-Datei ohne den Hauch einer Ahnung


Bernhard1
28.09.2005, 10:27
Hallo, zusammen,

ich muss eine *.doc Datei in eine Tabelle einlesen und hab nicht den Hauch einer Ahnung.

Im Anhang ist eine Sr-Ans.mdb und die dazugehörige doc.

Jetzt zur Sache:

Im Kopf zu jedem Ansetzungsblock sind das Datum, die Liga und die Mannschaftsart (MS-Art).

Diese Daten müssen vor jeden Datensatz, der dann mit Uhrzeit, Heimmannschaft und Gastmannschaft weitergeht. Vor der Gastmannschaft ist immer ein „-„.

Die weiteren Daten in der Zeile müssen nicht übernommen werden.

Für alle, die mir helfen wollen, habe ich in der Entwurfsansicht der Tabelle „paarungen“ in der Beschreibung Farben eingetragen, mit der die entsprechenden Daten im doc formatiert werden.

Hier noch mal als Liste aus dem ersten Ansetzungsblock:
liga – Kreisliga
ligazus – Altherren
datum – 24.09.2005
Nr – 25
Uhrzeit – 17:00
Heim – TSV Salzgitter
Gast - SG Barb/Le/Burg

Diese Daten sind auch in der Tabelle schon händisch eingegeben.

Die einzulesende Datei wird in C:\Daten\Lösungen\SR gespeichert werden. Die einzelnen Daten sind durch Leerzeichen getrennt, haben aber voneinander immer den gleichen Abstand.


Zu Schluß noch eins:

Ich kann mir vorstellen, dass dies ein größeres Projekt wird. Deshalb kann ich auch keine Komplettlösung verlangen (was aber schön wäre ;) ). Ich bedanke mich bereits jetzt für jede Hilfe, die mir zuteil wird.


Gruß
Bernhard

molnar
28.09.2005, 10:51
Meinst Du mit *.doc eine Word-Datei? Da es sich dabei um ein Binär-File handelt, kann man sie wohl kaum in Access direkt verarbeiten. Speichert man das Dukument im Format "Nur Text (*.txt)" ab, kann man sie Zeile für Zeile in Access einlesen und verarbeiten.

Gruß,
Reinhard

Bernhard1
28.09.2005, 11:05
Ein Aufruf als doc-Datei in WORD und anschließendes Abspeichern als NeuerName.txt ist natürlich kein Problem.

Ich hab die Dateil als doc eingestellt, da ich sie so bekommen habe und die farbigen Markierungen besser einbringen konnte.

Mein Problem ist das einlesen.

Bernhard

Bernhard1
29.09.2005, 07:02
Hallo, nochmal,

scheint so, als ob das Problem doch heftiger ist.

Mir würden aber auch Lösungsansätze helfen, die eine händische Nacharbeit einschließen. So kann ich mir vorstellen, dass die Spielpaarungen auch ohne Datum und Liga eingelesen werden und ich diese nacharbeite.

Nur wie gesagt, habe ich nicht den Hauch einer Ahnung, wie ich wenigstens das anstelle.

Ich habe nochmal die Dateien angehängt, jetzt aber nicht als doc, sondern als txt.

Vielleicht kann mir jetzt jemand helfen.

Gruß

Bernhard

molnar
29.09.2005, 12:13
Schau mal unter OpenTextFile in der Hilfe von Access nach. Dort steht ein kleines Beispiel, wie man eine Textdatei öffnet und wieder schließt. Mit txtVar = f.ReadLine kann man z.B. eine Zeile aus der als "f" geöffneten Datei in die Stringvariable txtVar einlesen. Diese kann man dann mit Textfunktionen wie Left, Mid, Right, Split usw. in Teile zerlegen und diese Teile in die einzelnen Tabellenfelder schreiben.

Ich hoffe, das hilft Dir weiter,
Reinhard

Bernhard1
29.09.2005, 15:51
Hallo, Reinhard,

Das hilft mir leider nicht weiter.

Ich bin jetzt so weit, dass ich die txt-Datei händisch händisch dahingehend bearbeite, dass ich alle Zeilen, in denen keine Spielansetzung steht, herausnehme.

Dann importiere ich Sie über den Importassistenten bzw. habe ich das Schema abgespeichert und rufe es über
DoCmd.transfertext,"Schema",.....
auf und importiere damit die aufbereiteten Daten.

Leider kann ich damit das Datum und die Liga nicht einlesen. Die muß ich hinterher wieder händisch eingeben.

Nicht schön, aber besser weiß ich es im Moment nicht.


Bernhard

Anne Berg
29.09.2005, 20:10
Nein, ich denke das händische Vor- und Nachbearbeiten solltest du dir ersparen.
Versuche den Vorschlag von Reinhard zu verfolgen und die Textdatei zeilenweise einzulesen, auseinander zu pflücken und die Daten in einer Tabelle abzuspeichern. Dazu empfiehlt sich wohl ein Recordset, den du nach und nach auffüllst bis dein Datensatz vollständig ist (wobei ich davon ausgehe, dass du dazu Informationen aus mehreren Zeilen benötigst).
Leider ist weder das Word-Doc noch die Textdatei wirklich "sauber" (zeilen- und spaltengerecht) aufgebaut, aber ich glaube, damit kann man leben.

Um dich mit diesem Weg anzufreunden und vertraut zu machen, suche doch mal hier im Forum nach ähnlichen Themen. Ich weiß genau, das haben auch schon andere durchgemacht! ;)


Nachtrag:
Anders sähe es natürlich aus, wenn dies eine einmalige Aktion wäre und es sich lediglich um den gezeigten Datenumfang handeln würde. Da hättest du die ca. 100 Zeilen wohl eher neu eingetippt bis du die Übernahme programmiert hättest! :D

Bernhard1
30.09.2005, 06:49
Hallo, Anne,

nein, leider ist das nicht eine einmalige Aktion, den jede Woche finden Fußballspiele statt, und es müssen dazu Schiedsrichter angesetzt werden. Leider stellt der DFB in seinem "dfbnet" die Daten nur so zur Verfügung. Und jeden Spieltag sind in den verschiedenen Klassen eine unterschiedliche Anzahl von Spielen einzulesen.

Ich werde mal versuchen, die benötigten Daten aus den "Kopfzeilen" (Spielklasse und Datum) zu extrahieren. Wie kriege ich aber die Schleife hin, dass Access weiß, wieviel nächste Zeilen (wo dann die einzelnen Paarungen drinstehen) einzulesen sind?

Bernhard

Anne Berg
30.09.2005, 08:22
Du musst die Datei zeilenweise einlesen und die einzelnen Zeilen analysieren. Es gibt ja zum Glück Merkmale, an denen du einen neuen Spieltag etc. erkennen kannst. ;)

Bernhard1
30.09.2005, 13:43
Hallo, Anne,

Du hast eine Super Art, Leute zu etwas zu motivieren, von dem sie geglaubt haben, dass sie es nicht schaffen - und das war nicht ironisch gemeint.

Die neue DB ist angehängt.

Ich habe jetzt die txt-Datei zeilenweise eingelesen und die für mich wichtigen Feldinhalte extrahiert.

Bei Aufruf der Abfrage sieht man mein nächstes Problem - die Ergebnisse sind zeilenweise, so wie sie in der "mi12345" eingelesen wurden.

Wie bekomme ich jetzt aber Datum und Liga und Staffel so zusammen, dass sie vor jeder dahinterstehenden Spielpaarung stehen. Nur so kann ich sie venünftig weiterbearbeiten?

Gruß und schon jetzt Dank

Bernhard

Anne Berg
30.09.2005, 15:25
Hallo Bernhard. Code ist da aber nicht drin - hast du das alles "per Hand" gemacht?

Ich habe mich wahrscheinlich nicht deutlich genug ausgedrückt. Ich hatte gehofft, du würdest meinen Tip zur Suche mal verfolgen und in älteren Beiträgen Anregungen finden... Ich habe jetzt kein Beispiel zur Hand und ehrlich gesagt keine große Lust bzw. nicht die Zeit, mir das alles neu auszudenken. Aber grundsätzlich hatte ich mir das so vorgestellt, dass du per VBA die Daten einliest, zeilenweise, also in einer Schleife. Da kannst du dann mit Hilfe verschiedener Access-Funktionen die Daten analysieren, nach signifikanten Teilstrings suchen, und Einzelinformationen zwischenspeichern. Wenn du einen Datensatz zusammen hast, schreibst du ihn per Recordset weg. Dabei musst du natürlich zunächst einmal festlegen, wie so ein kompletter Datensatz aussehen soll, welche Felder du brauchst. Ich vermute, die Tabelle "Paarungen" könnte das schon bieten.

Ich hoffe, dir hiermit einen weiteren Motivationsschub gegeben zu haben und warte auf konkrete Nachfragen. ;)

witschi1
30.09.2005, 18:46
Versuch es doch vieleicht mal in Word mit "Tabelle" - "Text in Tabelle", aber du musst vorher genau die Anzahl der Spalten zählen, in denen die Daten hinterher aufgeteilt sind.
Dann Spaltennnamen zuordnen und mittels "Aktualisierungsabfrage" in eine Access-Tabelle" (mit gleichen Spaltennnamen) einfügen.
Ein bischen Handarbeit bleibt dann immer noch, aber mit ein bischen Glück, habe ich schon etliche so komisch formatierte "Word-Dateien" übernommen.

PS: Hätte ich früher gewusst, dass man lieber gleich Tabellen erstellen soll und nicht die blöde "Tab-taste" in Word benutzt, wäre ich heute zehn Jahre jünger ...

Nouba
30.09.2005, 19:38
Ich habe Dir einen kleinen Import geschrieben, den Du über das Makro mcrLeseSR_Datei starten kannst.

Anne Berg
30.09.2005, 23:49
Danke für deine Unterstützung, Nouba!

Ich fürchte nur, der Code ist etwas zu ausgefuchst für Bernhard, als dass er ihn so ohne weiteres verstehen und an seine Bedürfnisse anpassen könnte. - Aber warten wir es ab! ;)

Kleiner Hinweis:
der Feldname "TmpArr_ID" im Modul "basStartup" muss durch "ST_ID" ersetzt werden.

Bernhard1
04.10.2005, 07:43
Hallo, zusammen,

ich melde mich erst jetzt, weil, wie Anne richtig schrieb, ich diesen Import erstmal verdauen musste. Ungefähr so schwierig habe ich mir das vorgestellt - das hätte ich nie hinbekommen.

@Anne
Nach Deinem vorletzten Beitrag habe ich die ganze Sache wohl wirklich falsch verstanden. Ich habe in der "Abfrage1" alle die Dinge hineingebastelt, so wie ich das verstanden hatte und zwar habe ich die txt-Datei zeilenweise in eine TEMP-Tabelle eingelesen und dann aus den einzelnen Zeilen die für mich wichtigen Informationen herausgeschnitten.

Dabei kamen dann leider zwar in der Abfrage die richtigen Werte heraus, aber leider halt auch jeweils in einer eigenen Zeile. Für mich wäre dann das Problem gekommen, diese Angaben zu den entsprechenden Datensätzen zusammenzubasteln.

Auch für Deinen kleinen Reparaturhinweis danke ich Dir.

@Nouba
Dir kann ich für Deine Arbeit nur vielmals Dank sagen. Die Weiterverarbeitung habe ich - bis hoffentlich eine Kleinigkeit - hinbekommen.

Ich erlaube mir aber noch zwei Anmerkungen, für die, die auch mal soetwas einlesen wollen und auf Deinen Import zurückgreifen:

1. Beim Einlesen der Uhrzeit kommt es bei Uhrzeiten wie 14 Uhr 30 Minuten zu dem seltsamen Effekt, dass der Import 14:03 Uhr ausgibt. Ich habe deshalb die Datenlänge um 1 auf 6 erhöht - damit ist der Fehler behoben.

2. Du hast die REG_ID als Primärschlüssel ohne Duplikate indiziert, der Index beginnt immer wieder mit 1. Werden dann weitere txt eingelesen, verweigert Access die Annahme, da wieder eine REG_ID, beginnend mit 1 geschrieben werden soll. Ich habe das dahingenehd gelöst, dass die eingelesenen Paarungen in die Tabelle "paarungen" übernommen werden und die von Dir geschriebenen Tabellen danach gelöscht werden.

Ist vielleicht nicht ganz sauber, aber praktisch brauchbar.

Jetzt möcht ich noch mal auf die "Kleinigkeit" zurückkommen, die ich vorhin angesprochen habe:

Die Feldlänge des "schiri" in "tblPaarungen" hast Du auf 30 gesetzt, der Import ist allerdings viel länger. Kannst Du mir bitte noch mal helfen und mir kurz beschreiben, wie ich in der Zeile
Schiri(j) = Trim$(Replace(Mid$(linie(k), posColon + 1), "?", Space$(1)))
(ich denke, die ist es) ebenfalls die Länge des Feldes auf 30 festlegen kann.

Zum Abschluss nochmals vielen Dank.


Bernhard

Bernhard1
04.10.2005, 11:53
Danke an alle, das Thema Anzahl einzulesender Zeichen hat sich erledigt, Lösung habe ich aus einem anderen Threat (import txt-File ohne Zeilenumbruch)

Bernhard