.res nach .txt konvertieren
Hallo,
ich will eine .res Datei in eine ganz einfache .txt Textdatei konvertieren - die Feldtrennzeichen sollen keine ; sein.
Vielleicht doch nicht so einfach. Brauch das für Access.
Access soll die Daten automatisch aus der txt Datei in einen Table einlesen. Das geht mit txt auch aber .res erkennt es nicht (obwohl eigendlich das gleiche).
Hab ein Makro das das mit excel macht und als Trennzeichen nen Strich verwendet. Aber genau das brauch ich für .res zu .txt mit ; (Semikolon)
Hab leider keine Ahnung was ich umändern muss.
Hiiiiiiiiillllllllllfffffffffeeeeeeeeee !!!
Sub Makro1()
Dim MerkName, MerkFormat, Tmp As String, Res As String, I As Long, Ch As String * 1
Const InpFile = "TTT.TMP", OutpFile = "TTT.TXT", TempDir = "C:\TEMP"
ChDir TempDir
MerkFormat = ActiveWorkbook.FileFormat
MerkName = ActiveWorkbook.FullName
ActiveWorkbook.SaveAs FileName:=InpFile, FileFormat:=xlTextWindows
Open InpFile For Input As #1
Open OutpFile For Output As #2
Do While Not EOF(1)
Line Input #1, Tmp
Res = ""
For I = 1 To Len(Tmp)
Ch = Mid$(Tmp, I, 1)
If Asc(Ch) = 9 Then
Res = Res & "|"
Else
Res = Res & Ch
End If
Next I
Print #2, Res
Loop
Close #1
Close #2
Kill MerkName
ActiveWorkbook.SaveAs FileName:=MerkName, FileFormat:=MerkFormat
Kill InpFile
End Sub
Antwort schreiben
Antwort 1 von lorf55 vom 29.10.2020, 15:49 Options
Hallo,
an der Stelle das | gegen ; tauschen?
....
If Asc(Ch) = 9 Then
Res = Res & ";"
Else
...
Allerdings ist es Access egal, ob als Trennzeichen <Tab> oder ; oder | da steht. Ansonsten mach mal ein Beispiel, wie deine .res aussieht.
Gruß
lorf
o.k.
aber wo muss ich die datei reinschreiben, die umgewandelt werden soll ?
hab in access nen button erstellt.
wenn ich diesen drücke soll er das hier ja ab arbeiten.
sprich es soll die .res datei, in eine .txt datei umgewandelt werden
Antwort 3 von lorf55 vom 29.10.2020, 23:13 Options
Hier steht doch alles:
Const InpFile = "TTT.TMP", OutpFile = "TTT.TXT", TempDir = "C:\TEMP"
InpFile = Eingabedatei, d.h. hier trägst du die RES-Datei ein
OutpFile = Ausgabedatei
TempDir = temporäres verzeichnis
Günstig wäre noch den Pfad mit zu den Dateinamen zu schreiben.
Bei Klick auf den Button in Excel geht es los.
Aber das brauchst du eigentlich nicht:
In Access importierst du mit Datei - Externe Daten - Importieren.
Da standardmäßig keine RES-Dateien importiert werden, kopierst du deine vorher in "ResKopie.csv" z.B. Denn eigentlich ist es ja eine schreibst du: hat text und hat durch Trennzeichen getrennte Spalten. Im Importieren-Fenster öffnest du diese Datei und hältst dich weiter an den Import-Assistenten. Lies dir genau durch was da steht und ob du das so brauchst. Du kannst bei Trennzeichen das Semikolon angeben oder unter "Anderes:" den | eingeben. Du kannst Felder auslassen, die du nicht brauchst. Du kannst den Dateityp jedes importierten Feldes anpassen. Also ich sehe keinen Grund für das makro.
Gruß
lorf
Also ich hab das jetzt so in Access eingefügt.
Hab es mit nem Button verbunden. Wenn man diesen drückt, sollte dieses Makro ausgeführt werden.
Jedoch kommt immer ein Fehler und zwar hier:
Kann es sein, dass dieses Makro nur in Excel geht und nicht wie ich es brauche in Access ?
Private Sub Command1_Click()
Dim MerkName, MerkFormat, Tmp As String, Res As String, I As Long, Ch As String * 1
Const InpFile = "M:\Project 21 - GFM DataBase\GFM Results 102708\411 Adhesion Layer Outer Electrode.res", OutpFile = "M:\Project 21 - GFM DataBase\GFM Results 102708\411 Adhesion Layer Outer Electrode.TXT", TempDir = "C:\TEMP"
ChDir TempDir
MerkFormat = ActiveWorkbook.FileFormat
MerkName = ActiveWorkbook.FullName
ActiveWorkbook.SaveAs FileName:=InpFile, FileFormat:=xlTextWindows
Open InpFile For Input As #1
Open OutpFile For Output As #2
Do While Not EOF(1)
Line Input #1, Tmp
Res = ""
For I = 1 To Len(Tmp)
Ch = Mid$(Tmp, I, 1)
If Asc(Ch) = 9 Then
Res = Res & ";"
Else
Res = Res & Ch
End If
Next I
Print #2, Res
Loop
Close #1
Close #2
Kill MerkName
ActiveWorkbook.SaveAs FileName:=MerkName, FileFormat:=MerkFormat
Kill InpFile
End Sub
Antwort 5 von coros vom 30.10.2020, 14:21 Options
Hallo,
Du bist hier in der Gruppe Excel. Somit ist der VBA-Code für Excel und nicht für Access. Da wird der VBA-Code 100%ig anders aussehen müssen.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Ich wurde vom Moderator dazu angehalten hier weiter zu machen
Antwort 7 von Mickey vom 30.10.2020, 14:45 Options
Das ist auch richtig so. Eine Mehrfachanfrage (respektive in dem fortgeschrittenen Stadium ein "Neubeginn") bringt Niemandem etwas. Wenn du den Thread verschoben haben möchtest dann nutze doch bitte unseren Button "Admin holen" (enthalten in jedem Post), und schreib da die gewünschte Gruppe dazu.
Gruss,
Mic
Bei Eingriffen ins System, die Registry oder Dateien erst eine Sicherung vornehmen©
Antwort 8 von lorf55 vom 31.10.2020, 06:08 Options
Das Zeichen asc(9) ist gleich 0x09 =^I = \t = HT = Horizontal Tab = "Horizontaler Tabulator" und bewegt den Druckkopf/Cursor zur nächsten vordefinierten Position (Tab-Stop) in der aktuellen Zeile.
Dieses Zeichen erkennt der Access-Importassistent genauso problemlos wie ";" und "|". Deshalb ist deine RES-TXT-Konvertierung unnötig. Da passiert nichts, was dich irgendwie weiter bringt.
Wenn du automatisch eine RES-Datei importieren willst, könnte man
die Lösung für Laborratte für dich anpassen. Dafür braucht es aber mehr Infos.
Gruß
lorf
So ich erklär mein Vorhaben nochmals genau.
Ich möchte eine .res-Datei (gleich wie txt) durch einen Knopfdruck in Access importieren (button zu makro verlinken kein problem. Aber das Makro). In der .res stehen die daten durch ; getrennt. Ich möchte nun dass das Makro die Daten aus der .res Datei in meinen Access-table einträgt.
Folgende Spalten hab ich im table (GFM_ DataBase): GFM, print step, lot#, production #, print line, date, time, operator, measure 1, measure 2, measure 3, measure 4, measure 5, measure 6, measure 7, measure 8, measure 9, measure 10, measure 11, measure 12, measure 13, measure 14, measure 15, measure 16, measure 17, measure 18, measure 19, measure 20
Hiiiilllfeee !!!
Sub Convert_res_to_txt()
CurrentDb.Execute _
"SELECT * INTO CONVERTED " + _
"FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=M:\Project 21 - GFM DataBase\GFM Results 102708;].[511 Tape Binder Reference Sheet.res];", dbFailOnError
CurrentDb.TableDefs.Refresh
CurrentDb.Execute _
"INSERT INTO GFM_DataBase ( GFM, print step, lot#, production #, print line, date, time, operator, measure 1, measure 2, measure 3, measure 4, measure 5, measure 6, measure 7, measure 8, measure 9, measure 10, measure 11, measure 12, measure 13, measure 14, measure 15, measure 16, measure 17, measure 18, measure 19, measure 20 )" + _
"FROM CONVERTED;", dbFailOnError
End Sub
Antwort 10 von lorf55 vom 01.11.2020, 15:52 Options
Hallo,
als 1. musst die RES-Datei in CSV umgetauft werden, damit dich Access versteht (ansonsten gibts "Laufzeitfehler 3027: Aktualisieren nicht möglich - Datenbank oder Objekt ist schreibgeschützt" xD).
Als 2. kann der INSERT-INTO-Teil wegfallen. Der war nur für die Auswertung von [UFC/g] nötig, wo neben Zahlen auch Sonderzeichen drin waren, die in die Spalte sz sollten.
Function Convert_res_to_txt()
Dim Pfad As String
Pfad = "M:\Project 21 - GFM DataBase\GFM Results 102708"
Dim file As String
file = "511 Tape Binder Reference Sheet"
'''' Die RES-Datei in CSV umbenennen damit Access uns versteht
Name Pfad & "\" & file & ".res" As Pfad & "\" & file & ".CSV"
'''' Tabelle anlegen und Daten importieren
CurrentDb.Execute _
"SELECT * INTO GFM_DataBase " + _
"FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=" & Pfad & ";].[" & file & ".CSV];", dbFailOnError
CurrentDb.TableDefs.Refresh
'''' Ausgangszustand wieder herstellen
Name Pfad & "\" & file & ".CSV" As Pfad & "\" & file & ".res"
End Function
Ich habe es als Function gemacht, damit du es in ein Makro setzen kannst, damit du es über ein Icon in der Access-Menüleiste aufrufen kannst.
Subs werden von Makros nicht genommen, obwohl die Rückgabewerte der Funktionen eh nicht benötigt werden. Das Icon gibt es in diesem Fall nur über ein Makro.
Ist alles ein bisschen eigenwillig.
Gruß
lorf
Hi, super Vielen Dank.
Hab noch kleinere Probleme.
1. Kommt immer "Fehler 53" File not Found
2. Möchte ich auch, dass die die Daten in die passenden Spalten geschrieben werden. Dazu hab ich schon den Table mit den Spalten erstellt.
Private Sub Command2_Click()
Convert_res_to_txt
End Sub
Function Convert_res_to_txt()
Dim Pfad As String
Pfad = "M:\Project 21 - GFM DataBase\GFM Results 102708"
Dim file As String
file = "511 Tape Binder Reference Sheet"
'''' Die RES-Datei in CSV umbenennen damit Access uns versteht
Name Pfad & "\" & file & ".res" As Pfad & "\" & file & ".CSV"
'''' Tabelle anlegen und Daten importieren
CurrentDb.Execute _
"SELECT * INTO GFM_DataBase " + _
"FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=" & Pfad & ";].[" & file & ".CSV];", dbFailOnError
CurrentDb.TableDefs.Refresh
'''' Ausgangszustand wieder herstellen
Name Pfad & "\" & file & ".CSV" As Pfad & "\" & file & ".res"
End Function
ok problem 1 ist gelöst
problem 2 besteht weiterhin:
es werden die Daten zwar in die passenden Zeilen geschrieben, aber eben alles in eine Spalte und nicht wie gewollt auf die jeweiligen (mehrere) Spalten verteilt.
Antwort 13 von lorf55 vom 04.11.2020, 07:29 Options
Hallo,
meine "511 Tape Binder Reference Sheet" sieht so aus:
GFM; print step; lot_No; production_No; print line; date; time; operator; measure 1; measure 2; measure 3; measure 4; measure 5; measure 6; measure 7; measure 8; measure 9; measure 10; measure 11; measure 12; measure 13; measure 14; measure 15; measure 16; measure 17; measure 18; measure 19; measure 20
GFM1; print step; 72; 11; 1; 22.11.02; 08:06; erator; m1; m2; m3; m4; m5; m6; m7; m8; m9; m10; m11; m12; m13; m14; m15; m16; m17; m18; m19; m20
GFM2; print step; 83; 22; 2; 22.11.02; 08:07; erator; m1; m2; m3; m4; m5; m6; m7; m8; m9; m10; m11; m12; m13; m14; m15; m16; m17; m18; m19; m20
Diese schreibt das Makro sehr schön zeilenweise in die vorgesehenen Spalten.
Wie sieht denn deine "511 Tape Binder Reference Sheet" aus?
Gruß
lorf
Bei mir siehts so aus:
alles steht mit ; getrennt in der 1.Spalte des tables.
Die Zeilen sind aufgeteilt, aber alles in der 1. Spalte und kein GFM, print step, lot # ... vorhanden
Das ist mein kompletter VBA Code
Private Sub Command2_Click()
Convert_res_to_txt
End Sub
Function Convert_res_to_txt()
Dim Pfad As String
Pfad = "M:\Project 21 - GFM DataBase\GFM Results 102708"
Dim file As String
file = "511 Tape Binder Reference Sheet"
'''' Die RES-Datei in CSV umbenennen damit Access uns versteht
Name Pfad & "\" & file & ".res" As Pfad & "\" & file & ".CSV"
'''' Tabelle anlegen und Daten importieren
CurrentDb.Execute _
"SELECT * INTO GFM_DataBase " + _
"FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=" & Pfad & ";].[" & file & ".CSV];", dbFailOnError
CurrentDb.TableDefs.Refresh
'''' Ausgangszustand wieder herstellen
Name Pfad & "\" & file & ".CSV" As Pfad & "\" & file & ".res"
End Function
Ach ja, ich hab ja nur Werte in der .res Datei.
Die Spaltennamen sollten:
GFM; print step; lot_No; production_No; print line; date; time; operator; measure 1; measure 2; measure 3; measure 4; measure 5; measure 6; measure 7; measure 8; measure 9; measure 10; measure 11; measure 12; measure 13; measure 14; measure 15; measure 16; measure 17; measure 18; measure 19; measure 20
sein.
Das muss ich auch noch irgendwie hinbekommen
Antwort 16 von lorf55 vom 04.11.2020, 15:14 Options
Nochmal. In Aw 13 habe ich eine Beispieleingabe für das makro gepostet. Wenn deine Datei auch so aufgebaut ist, läuft es.
Poste doch bitte mal die 1. drei Zeilen deiner Eingabedatei "511 Tape Binder Reference Sheet" in anonymisierter Form. Könnte die eventuell noch irgendwelche Steuerzeichen enthalten, also ASCII zwischen 1 und 20?
Gruß
lorf
So sieht der Inhalt meiner .res Datei aus.
Test; 0F021451752200451175; 0F021451752200451175; ; 02; 13.06.2005; 10:47:11; BE; 250.547; 21.18; 22.14; 21.61; 22.83; 21.70; 21.65
Test; a; a; ; 01; 13.06.2005; 10:53:01; a; 250.553; 21.09; 22.12; 21.55; 22.41; 21.71; 21.81
Test; 0F021451792200451179; 0F021451792200451179; ; 02; 15.06.2005; 12:55:50; be; 250.523; 21.79; 21.18; 19.15; 14.58; 17.72; 18.48
Test; 0F020451852000451185; 0F020451852000451185; ; 01; 15.06.2005; 13:11:28; lm; 250.553; 23.69; 21.75; 22.07; 22.04; 21.23; 23.06
Test; 0F021451792200451179; 0F021451792200451179; ; 02; 15.06.2005; 13:13:51; be; 250.568; 26.26; 21.92; 21.73; 22.90; 20.54; 22.67
Test; 0F021451792200451179; 0F021451792200451179; ; 02; 15.06.2005; 13:36:52; be; 250.544; 22.80; 20.72; 22.23; 22.41; 17.76; 23.23
Test; 0F020451852000451185; 0F020451852000451185; ; 01; 15.06.2005; 13:39:09; lm; 250.570; 21.83; 22.08; 23.51; 26.44; 24.26; 24.09
Test; 0F021451792200451179; 0F021451792200451179; ; 02; 15.06.2005; 13:46:23; be; 250.593; 24.09; 21.41; 21.43; 22.15; 22.01; 23.20
Test; 0F021451792200451179; 0F021451792200451179; ; 02; 15.06.2005; 14:07:34; be; 250.605; 24.45; 22.05; 21.43; 22.10; 22.03; 23.29
Test; 0F021451852200451185; 0F021451852200451185; ; 02; 21.06.2005; 10:16:02; be; 250.545; 18.31; 17.34; 18.13; 19.30; 18.13; 18.26
Test; 0F021451852200451185; 0F021451852200451185; ; 02; 21.06.2005; 10:27:51; be; 250.553; 17.72; 16.68; 18.00; 19.06; 18.51; 18.57
Test; 0F021451862200451186; 0F021451862200451186; ; 02; 21.06.2005; 11:36:07; be; 250.585; 16.65; 17.46; 17.85; 19.67; 17.01; 17.80
Test; 0F020451922000451192; 0F020451922000451192; ; 04; 21.06.2005; 11:54:57; be; 250.584; 18.07; 18.82; 17.61; 21.16; 17.77; 18.25
Ich hab als Makro nur:
1. den button
2. die Funktion von Dir
Antwort 18 von lorf55 vom 04.11.2020, 16:26 Options
Geht bei mir nach Einfügen der Kopfzeile:
GFM; print step; lot_#; production_#; print line; date; time; operator; measure 1; measure 2; measure 3; measure 4; measure 5; measure 6; measure 7; measure 8; measure 9; measure 10; measure 11; measure 12; measure 13; measure 14; measure 15; measure 16; measure 17; measure 18; measure 19; measure 20
problemlos durch. Und warum fehlt die bei dir? Oder fehlt die generell?
Bin jetzt etwas ratlos.
Kannst du mir mal Dein komplettes VBA bzw. Macrocoding posten ?
Das wär super.
Antwort 20 von lorf55 vom 04.11.2020, 16:48 Options
Ist denn in deiner Res-Datei die Kopfzeile drin oder nicht.
Wenn nein, denn füge die doch mal ein!
Das Makro sind die 3 zeilen und das ist der VBA-Code (außer dem Pfad nichts anders):
Function Convert_res_to_txt()
Dim Pfad As String
Pfad = "G:\Lösungen"
Dim file As String
file = "511 Tape Binder Reference Sheet"
'''' Die RES-Datei in CSV umbenennen damit Access uns versteht
Name Pfad & "\" & file & ".res" As Pfad & "\" & file & ".CSV"
CurrentDb.Execute _
"SELECT * INTO GFM_DataBase " + _
"FROM [Text;FMT=Delimited(;);HDR=Yes;DATABASE=" & Pfad & ";].[" & file & ".CSV];", dbFailOnError
CurrentDb.TableDefs.Refresh
'''' Ausgangszustand wieder herstellen
Name Pfad & "\" & file & ".CSV" As Pfad & "\" & file & ".res"
End Function