Autor
|
Thema: txt Datei ändern und speichern (1122 mal gelesen)
|
Garry Mitglied Techniker/Konstrukteur
Beiträge: 683 Registriert: 05.03.2003
|
erstellt am: 08. Dez. 2005 12:09 <-- editieren / zitieren --> Unities abgeben:
Hallo, jetzt können mir nur noch (Hoffnetlich) die Leute der Programmiertechnik helfen. Habe eine *.txt Datei deren inhalt sieht so aus. 'eintrag1','zahlenwert1',eintrag2' 'eintrag3','zahlenwert2',eintrag4' 'eintrag5','zahlenwert3',eintrag6' 'eintrag7','zahlenwert4',eintrag8' 'eintrag9','zahlenwert5',eintrag10' usw. mein Problem ist ich muss in den Raum Zahlenwert vor die Zahl den Text POS- einbringen. z.b. 'eintrag1','POS-zahlenwert1',eintrag2' 'eintrag3','POS-zahlenwert2',eintrag4' 'eintrag5','POS-zahlenwert3',eintrag6' 'eintrag7','POS-zahlenwert4',eintrag8' 'eintrag9','POS-zahlenwert5',eintrag10' usw. da ich hier kein Excel oder sonstiges Prog zwischenschalten frage ich hier mal nach, ob sowas mit einem Skript ,VB oder *.BAT(wäre mir am Liebsten) datei möglich wäre. Diesen eintrag zu Tätigen und das ganze wieder unterm gleichen namen zu speicher. Ich lese aus einem CAD-Prog. die Atribute aus und diese werden in 2 *.TXT datei geschrieben, und davon sollte eine beim Zahlenwert der unterschiedlich ist den Vorsatz POS- bekommen bevor sie von einem 2unterschiedlichen Stücklisten-Programmen wieder eingelesen werden. vielleicht Erbarmt sich jemand und kann mir Helfen. gruß Garry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 08. Dez. 2005 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für Garry
Hi Garry, manche Texteditoren (zB VIM www.vim.org) 'können' REGEXP da sähe das ganz einfach so aus für die erste Fundstelle: :%s/,'/,'POS-/ Ich geh' mal davon aus, das fehlende führende Hochkomma ist ein Schreibfehler, wenn nicht, gehts doch 'normal' im Wordpad;-) Oder als Makro und ohne RE;-)
Code:
Sub asdf() Dim s0$, s1 Open "o:\test.txt" For Input As #1 Open "o:\test1.txt" For Output As #2 While Not EOF(1) Line Input #1, s0 s1 = Split(s0, ",'") s1(1) = "POS-" & s1(1) Print #2, Join(s1, ",'") Wend Close #1 Close #2 End Sub
Gruss NancyEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Garry Mitglied Techniker/Konstrukteur
Beiträge: 683 Registriert: 05.03.2003
|
erstellt am: 08. Dez. 2005 13:49 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von startrek: Hi Garry,manche Texteditoren (zB VIM www.vim.org) 'können' REGEXP da sähe das ganz einfach so aus für die erste Fundstelle: :%s/,'/,'POS-/ Ich geh' mal davon aus, das fehlende führende Hochkomma ist ein Schreibfehler, wenn nicht, gehts doch 'normal' im Wordpad;-) Oder als Makro und ohne RE;-)
Code:
Sub asdf() Dim s0$, s1 Open "o:\test.txt" For Input As #1 Open "o:\test1.txt" For Output As #2 While Not EOF(1) Line Input #1, s0 s1 = Split(s0, ",'") s1(1) = "POS-" & s1(1) Print #2, Join(s1, ",'") Wend Close #1 Close #2 End Sub
Gruss Nancy
Hallo Nancy, das führende Hochkomma ist kein Schreibfehler, die Ausgabe-Datei schaut genauso aus. Ich kann kein anderes Programm starten nur ein Skript(wäre am Einfachsten) eine Batch datei oder ein Makro wenn man dies auch Anschucken kann wie eine Batch / Skript DAtei, da das ganze Automatisch im Hintergrund ablaufen soll. Kann man ein Makro so abspeichern das es, wenn es aufgerufen wird Startet und Abläuft. gruß
Garry Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Garry Mitglied Techniker/Konstrukteur
Beiträge: 683 Registriert: 05.03.2003 WIN10 (64bit), SWX 2019 Premium SP5, PDM-Pro2019 , XEON W-3225-3,7GHz 128GB, NVidia RT6000 SpacePilot Pro, SSD500GB Office 365
|
erstellt am: 08. Dez. 2005 14:36 <-- editieren / zitieren --> Unities abgeben:
|
startrek Mitglied Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 08. Dez. 2005 23:25 <-- editieren / zitieren --> Unities abgeben: Nur für Garry
> Kann man ein Makro so abspeichern das es, > wenn es aufgerufen wird Startet und Abläuft. Denke schon;-) Gugge mal hier Du brauchst natürlich eine Application dazu, welche VBA unterstützt. Das kann Autocad sein, Excel oder Word, oder auch Corel Draw oder weiss-der-Geier ... Einfach Alt+F11 drücken, Einfügen > Modul, in das Codefenster 'Modul1' den code kopieren und ausführen mit F5 oder Alt + F8 je nachdem unter welcher Umgebung Rein theoretisch [mangels Nichtwissen] müsste auch sowas gehen, wenn du den code kopierst und in einem Texteditor einfügst und als *.vbs abspeicherst [oder die *.txt in *.vbs umbenennst] Bin mir mit vb-script aber nicht sicher, kann sein, da war was anders mit sub/end sub und dem Dim as ..., jedenfalls müssteste dann die *.vbs nur noch via Doppelklick im Explorer starten. Aber Holzauge sei wachsam, trau' nur vbs-files die du selbst erstellt oder gefälscht hast ... oder wo du zumindest annähernd den Quellcode 'lesend' verstehst;-) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 what i think? I think, no skill
|
erstellt am: 13. Dez. 2005 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für Garry
:-) Holzauge und wachsam :-) Code: 'Pos-zahlen.vbs 'wandelt *.txt in pos-*.txt und ersetzt 'zahlen*' in 'POS-zahlen*' 'einfach per drag and drop - alt. send toOption Explicit Dim WSHShell, fso, FileIn, FileOut Dim Datei, Zielver, Text, Txt, i, arrSort, arrTest(), oArgs Set WSHShell = WScript.CreateObject("WScript.Shell") Set fso = WScript.CreateObject("Scripting.FileSystemObject") set oArgs = Wscript.Arguments ' Falls ein Argument übergeben wurde, sollte es einen Dateinamen enthalten ' For i = 0 to oArgs.Count - 1 ' hole alle Argumente Datei = oArgs.item(i) 'msgbox Datei If not fso.FileExists( Datei ) then MsgBox UCase( Datei ) & " existiert nicht!" & vbCRLF & vbCRLF & " . . . das ist das Ende.", , WScript.ScriptName WScript.Quit End If Exit For ' nur das erste Argument reicht Next ' Gibt's keinen Dateinamen, wird das Skript gelesen if Datei = "" then Datei = WScript.ScriptName ' alle Zeilen lesen und an Array übergeben Set FileIn = FSO.OpenTextFile(Datei, 1, true) ' Datei zum Lesen öffnen 'msgbox Datei i=0 Do While Not (FileIn.atEndOfStream) ' wenn Datei nicht zu ende ist, weiter lesen ReDim Preserve Zeile(i) Zeile(i) = FileIn.Readline i = i + 1 Loop If i < 1 Then ReDim Preserve Zeile(i) Zeile(i) = "Leerdatei" End If FileIn.Close Set FileIn = nothing ' Array bearbeiten; hier: replace for i = LBound( Zeile ) to UBound( Zeile ) Zeile(i) = Replace( Zeile(i), "zahlen", "POS-zahlen") next ' Array in (Ziel-) Datei schreiben Zielver="C:\test\" 'vorgabe zielverzeichnis Datei = zielver & "POS-" & fso.GetBaseName ( Datei ) & ".txt"' Set FileOut = FSO.OpenTextFile( Datei , 2, true) ' Datei zum Screiben öffnen; 2: immer neu anlegen for i = 0 to ubound( Zeile ) FileOut.WriteLine Zeile(i) 'msgbox Zeile(i) next FileOut.Close Set FileOuT = nothing ' (Ziel-) Datei anzeigen WSHShell.run "notepad """ & Datei & """" , , True ' True: Skriptabarbeitung wartet bis Programm (notepad) beendet ist ' (Ziel-) Datei löschen 'fso.DeleteFile( Datei )
[Diese Nachricht wurde von Thomas Harmening am 13. Dez. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
Beiträge: 453 Registriert: 23.01.2002
|
erstellt am: 14. Dez. 2005 02:31 <-- editieren / zitieren --> Unities abgeben: Nur für Garry
wachsames Holzauge II Public Sub ReplacePos(sFileName As String) 'sFileName = Name der Datei Dim FNr As Long, sInclPos As String, s As String ' Datei öffnen FNr = FreeFile Open sFileName For Input As FNr Do While Not EOF(FNr) Line Input #FNr, s ' gelesene Zeile ersetzen und in String schreiben sInclPos = sInclPos & Replace(s, "zahlen", "POS-zahlen") & vbCrLf Loop Close FNr 'String in neue Datei schreiben FNr = FreeFile Open Left(sFileName, Len(sFileName) - 4) & "_Pos.txt" _ For Output As FNr Print #FNr, Left(sInclPos, Len(sInclPos) - 2) Close FNr End Sub pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Garry Mitglied Techniker/Konstrukteur
Beiträge: 683 Registriert: 05.03.2003 WIN10 (64bit), SWX 2019 Premium SP5, PDM-Pro2019 , XEON W-3225-3,7GHz 128GB, NVidia RT6000 SpacePilot Pro, SSD500GB Office 365
|
erstellt am: 17. Dez. 2005 08:27 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|