Inhalt von Textdateien modifizieren [Schaltersammlung]

Forum zur Erstellung von Anwendungen der erweiterten Scripting-Funktion
Info: Diese Schalter und Script-Anwendungen funktionieren erst ab der Version 11
Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Kundal » 14. Feb 2014 12:31

Alle hier vorgestellten Schaltercodes müssen als Scriptfunktion ausgeführt werden (Befehlseditor=>Schaltfläche Funktion:=>Scriptfunktion).

Da ich keine Scriptsprache beherrsche, beschränken sich meine Scripting-Fähigkeiten darauf, Scripts aus dem Netz so zu modifizieren, dass sie mit in DOpus ausgewählten Dateien durch Klick auf einen Schalter funktionieren. Zu Übungszwecken habe ich ein paar einfache VB-Scripts, mit denen Text in Textdateien bearbeitet werden kann so konvertiert. Die meisten Vorlagen stammen aus dem Microsoft Technet Scripting Center.

Achtung: Zumindest bei allen Schaltern, die die Originaldateien durch Löschen oder Umbenennen verändern (Schalter 2), 3), 5), 6), 10) und 12)) empfehle ich ausdrücklich, mit Kopien bzw. Backups zu arbeiten, da die Rückgängig-Funktion mit diesen Codes nicht funktioniert! Zur Sicherheit funktionieren die meisten Schalter mit Hilfe einer editierbaren Liste von Dateiendungen nur mit Dateitypen, die reinen Text enthalten. Die Schalter 1), 4) und 11) funktionieren dagegen auch mit Binärdateien, da sie die Originaldateien nicht verändern.

Die Schaltercodes:

1) Lese Zeile n aus markierten Dateien
Der Schalter liest aus allen markierten Dateien die Zeile n aus (Zeilennummer wird in einem Dialog abgefragt; Vorgabe im Code ist 5) und gibt das Ergebnis in der Textdatei output.txt im Quellordner aus.

Code: Alles auswählen

Function OnClick(ByRef ClickData)
   iLineNumber = DOpus.Dlg.GetString ("Zeilennummer eingeben:",5,,"Auslesen","Textzeile auslesen")
   Set objFS = CreateObject("Scripting.FileSystemObject") 
   Set objOF = objFS.CreateTextFile("{alias|desktop}\output.txt")      
   For each file in ClickData.Func.Command.files
      strFilePath = file
      Set objTS = objFS.OpenTextFile(strFilePath) 
      For i=1 To (iLineNumber-1) 
         objTS.SkipLine 
      Next
      objOF.WriteLine objTS.Readline
   Next 
End Function
2) Lösche n Zeilen vom Anfang
Der Schalter löscht die in einem Dialog abgefragte Anzahl Zeilen (Vorgabe 5) vom Anfang der ausgewählten Dateien.

Code: Alles auswählen

Const FOR_READING = 1 
Const FOR_WRITING = 2 
Function OnClick(ByRef ClickData)
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
   iNumberOfLinesToDelete = DOpus.Dlg.GetString ("Zeilenanzahl eingeben:",5,,"OK","Zeilen vom Anfang löschen")
   Set objFS = CreateObject("Scripting.FileSystemObject")
   For each file in ClickData.Func.Command.files
      strFilePath = file
      Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING) 
      strContents = objTS.ReadAll 
      objTS.Close 
      arrLines = Split(strContents, vbNewLine) 
      Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING) 
      For i=0 To UBound(arrLines) 
         If i > (iNumberOfLinesToDelete - 1) Then 
         objTS.WriteLine arrLines(i) 
         End If 
      Next 
   Next
End Function
3) Lösche n Zeilen vom Ende
Der Schalter löscht analog zu Schalter 2) eine Anzahl Zeilen vom Ende der ausgewählten Dateien.

Code: Alles auswählen

Const FOR_READING = 1 
Const FOR_WRITING = 2 
Function OnClick(ByRef ClickData)
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
   iNumberOfLinesToDelete = DOpus.Dlg.GetString ("Zeilenanzahl eingeben:",5,,"OK","Zeilen vom Anfang löschen")
   Set objFS = CreateObject("Scripting.FileSystemObject")
   For each file in ClickData.Func.Command.files
      strFilePath = file
      Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING) 
      strContents = objTS.ReadAll 
      objTS.Close 
      arrLines = Split(strContents, vbNewLine) 
      Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING) 
      iIndexToDeleteFrom = UBound(arrLines)- iNumberOfLinesToDelete + 1
      For i=0 To UBound(arrLines) 
         If i < (iIndexToDeleteFrom) Then 
         objTS.WriteLine arrLines(i) 
         End If 
      Next 
   Next
End Function
4) Dateien zusammenfassen
Der Schalter kopiert den Inhalt aller markierten Dateien in eine neue Datei auf dem Desktop (/desktop\output.txt).

Code: Alles auswählen

Function OnClick(ByRef ClickData)
   Set objFSO = CreateObject("Scripting.FileSystemObject")
   Set objOutputFile = objFSO.CreateTextFile("{alias|desktop}\output.txt")
   For each file in ClickData.Func.Command.files
      strFilePath = file
      Set objTextFile = objFSO.OpenTextFile(strFilePath) 
      strText = objTextFile.ReadAll
      objTextFile.Close
      objOutputFile.WriteLine strText
   Next
      objOutputFile.Close
End Function
5) Text suchen und ersetzen
Der Schalter fragt in 2 Dialogen zunächst den Suchtext ab und dann den Text der den Suchtext ersetzen soll. Wenn die zweite Abfrage leer bleibt wird der Suchtext gelöscht. Auch dieser Schalter funktioniert mit mehreren ausgewählten Dateien.

Code: Alles auswählen

Function OnClick(ByRef ClickData)
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
   SearchText = DOpus.Dlg.GetString ("Suchtext eingeben:",,,"Suchen","Text suchen")
   ReplaceText = DOpus.Dlg.GetString ("Ersetzen durch:",,,"Ersetzen","Text ersetzen")
   Set fso = CreateObject("Scripting.FileSystemObject")
   For each file in ClickData.Func.Command.files
      strFilePath = file
      text = fso.OpenTextFile(strFilePath).ReadAll
      text = Replace(text, SearchText, ReplaceText)
      fso.OpenTextFile(strFilePath, 2).Write text
   Next
End Function
6) Lösche Zeilen x bis y aus Datei
Der Schalter löscht mehrere Zeilen aus markierten Dateien. Die erste und letzte zu löschende Zeile werden in Dialogboxen abgefragt.

Code: Alles auswählen

Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
	iStartAtLineNumber = DOpus.Dlg.GetString ("Erste zu löschende Zeile:",3,,"OK","Erste Zeile")
	iEndAtLineNumber   = DOpus.Dlg.GetString ("Letzte zu löschende Zeile:",7,,"OK","Letzte Zeile")
	Set objFS = CreateObject("Scripting.FileSystemObject")
	For each file in ClickData.Func.Command.files
		strFilePath = file
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
		strContents = objTS.ReadAll
		objTS.Close
		arrLines = Split(strContents, vbNewLine)
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
		For i=0 To UBound(arrLines)
		   If i < (iStartAtLineNumber-1) OR i > (iEndAtLineNumber-1) Then
		      objTS.WriteLine arrLines(i)
		   End If
		Next
	Next
End Function
7) Textinhalt aus der Zwischenablage am Anfang der Datei einfügen

Code: Alles auswählen

Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
Set objFS = CreateObject("Scripting.FileSystemObject")
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
	For each file in ClickData.Func.Command.files
		strFilePath = file
		strNewContent  = DOpus.GetClip
		Set objTS = objFS.OpenTextFile(strFilePath,FOR_READING)
		strContents = objTS.ReadAll
		objTS.Close
		Set objTS = objFS.OpenTextFile(strFilePath,FOR_WRITING)
		objTS.WriteLine strNewContent
		objTS.Write strContents
	Next
End Function
8) Textinhalt aus der Zwischenablage am Ende der Datei einfügen

Code: Alles auswählen

Const FOR_APPENDING = 8
Function OnClick(ByRef ClickData)
	Set objFS = CreateObject("Scripting.FileSystemObject")
	strContent  = DOpus.GetClip
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
	For each file in ClickData.Func.Command.files
		strFilePath = file
	Set objTS = objFS.OpenTextFile(strFilePath,FOR_APPENDING)
	objTS.Write vbCRLF & strContent
	Next
End Function
9) Textinhalt aus der Zwischenablage nach Zeile n einfügen
Der Schalter fragt in einer Dialogbox die Zelennummer ab, nach der der Text eingefügt werden soll

Code: Alles auswählen

Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
	Set objFS = CreateObject("Scripting.FileSystemObject")
	strNewContent = DOpus.GetClip 
	iInsertAfterLineNumber = DOpus.GetString ("Zeile nach der Text eingefügt werden soll:",5,,"OK","Text einfügen")
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
	For each file in ClickData.Func.Command.files
		strFilePath = file
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
		strContents = objTS.ReadAll
		objTS.Close
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
		arrLines  = Split(strContents, vbNewLine)
		For i=0 To UBound(arrLines)
		   If i = (iInsertAfterLineNumber-0) Then
		      objTS.WriteLine strNewContent
		   End If
		objTS.WriteLine arrLines(i)
		Next
	Next
End Function
10) Textdatei leeren
Der Schalter löscht den gesamten Textinhalt aus den ausgewählten Dateien

Code: Alles auswählen

Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
	Set objFS = CreateObject("Scripting.FileSystemObject")
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
	For each file in ClickData.Func.Command.files
		strFilePath = file
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
	Next
End Function
11) Inhalt in die Zwischenablage kopieren
Der Schalter kopiert die Textinhalte aller ausgewählten Dateien, getrennt durch eine Leerzeile, in die Zwischenablage

Code: Alles auswählen

Function OnClick(ByRef ClickData)
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	strClip = ""
	For each file in ClickData.Func.Command.files
		strFilePath = file
		Set objTextFile = objFSO.OpenTextFile(strFilePath) 
		strText = objTextFile.ReadAll
		objTextFile.Close
		strClip = strClip & strText & vbCRLF & vbCRLF
	Next
	DOpus.SetClip strClip
End Function
12) Zeilen löschen die mit einem festgelegten Text anfangen
Der Schalter fragt einen Text-String ab und löscht alle Zeilen, die damit beginnen aus den ausgewählten Dateien

Code: Alles auswählen

Const FOR_READING = 1
Const FOR_WRITING = 2
Function OnClick(ByRef ClickData)
	Set objFS = CreateObject("Scripting.FileSystemObject")
	strCheckForString = UCase(DOpus.GetString ("Zeilen löschen, die mit diesem Text beginnen:","beispieltext",,"OK","Textzeilen löschen "))
	ClickData.Func.Command.RunCommand("Select HIDEUNSEL NOPATTERN")
	ClickData.Func.Command.RunCommand("Select PATTERN *(ini|.htm|.xml|.rdf|.html|.url|.shtml|.lng|.dcf|.dop|.omd|.torrent|.php|.css|.inc|.js|.tpl|.sql|.reg|.bat|.vbs|.cmd|.btm|.ncl|.m3u|.pls|.cue|.txt) DESELECTNOMATCH")
	ClickData.Func.Command.RunCommand("Select NOPATTERN SHOWHIDDEN")
	For each file in ClickData.Func.Command.files
		strFilePath = file
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_READING)
		strContents = objTS.ReadAll
		objTS.Close
		arrLines = Split(strContents, vbNewLine)
		Set objTS = objFS.OpenTextFile(strFilePath, FOR_WRITING)
		For Each strLine In arrLines
			If Not(Left(UCase(LTrim(strLine)),Len(strCheckForString)) = (strCheckForString)) Then  
			objTS.WriteLine strLine
			End If
		Next
	Next
End Function
13) Textdateien (nur .txt) in Word-Dokumente (.docx, ab Office 2010) konvertieren[/b]
Der Schalter konvertiert alle .txt-Dateien in markierten Ordnern, sowie ausgewählte .txt-Dateien im aktuellen Ordner nach .docx.
Quelle: Script to convert .txt file to Word document (VBScript)

Code: Alles auswählen

'---------------------------------------------------------------------------------
' The sample scripts are not supported under any Microsoft standard support
' program or service. The sample scripts are provided AS IS without warranty
' of any kind. Microsoft further disclaims all implied warranties including,
' without limitation, any implied warranties of merchantability or of fitness for
' a particular purpose. The entire risk arising out of the use or performance of
' the sample scripts and documentation remains with you. In no event shall
' Microsoft, its authors, or anyone else involved in the creation, production, or
' delivery of the scripts be liable for any damages whatsoever (including,
' without limitation, damages for loss of business profits, business interruption,
' loss of business information, or other pecuniary loss) arising out of the use
' of or inability to use the sample scripts or documentation, even if Microsoft
' has been advised of the possibility of such damages.
'---------------------------------------------------------------------------------

Option Explicit
Dim Item
Dim objshell
Dim dlg
Dim i
Function OnClick(ClickData)
	Set dlg = ClickData.Func.Dlg
	dlg.message = "Stellen Sie bitte sicher, dass alle geöffneten Word Dokumente gespeichert sind, " &_
	    "klicken Sie dann 'OK' um fortzufahren"
	dlg.title = "Warnung"
	dlg.icon = "warn"
	dlg.buttons = "OK|Abbrechen"
	i= dlg.Show
	If i = 1 Then
		For Each Item In ClickData.func.sourcetab.selected
			Call main 
		Next
	End If
End Function

Sub main()
	Dim TxtFilePath
	TxtFilePath = Item
	StopWordApp
	Set objshell = CreateObject("scripting.filesystemobject")
	If objshell.FolderExists(TxtFilePath) Then  'Check if the object is a folder
		Dim flag,FileNumber
		flag = 0 
		FileNumber = 0 	
		Dim Folder,DocFiles,DocFile		
		Set Folder = objshell.GetFolder(TxtFilePath)
		Set DocFiles = Folder.Files
		For Each DocFile In DocFiles  'loop the files in the folder
			FileNumber=FileNumber+1 
			TxtFilePath = DocFile.Path
			If GetWordFile(TxtFilePath) Then  'if the file is text file, then convert it 
				ConvertTxtToWord TxtFilePath
				flag=flag+1
			End If 	
		Next 
		Set dlg = DOpus.Dlg
		dlg.Window = DOpus.Listers(0)
		dlg.message = "Es befinden sich insgesamt " & FileNumber & " Dateien im Ordner." & vbCrLf & "Es wurden " &_
		    flag & " '.txt'-Dateien In Word-Dokumente konvertiert."
		dlg.title = "Warnung"
		dlg.icon = "info"
		dlg.buttons = "OK"
		i= dlg.Show
	Else 
		If GetWordFile(TxtFilePath) Then  'if the object is a file,then check if the file is a text file.if that, convert it 
			ConvertTxtToWord TxtFilePath
		End If  
	End If 
End Sub 

Function ConvertTxtToWord(TxtFilePath)
	Dim objshell,ParentFolder,BaseName,wordapp,doc,WordFilePath,objDoc
	Dim objSelection
	Set objshell= CreateObject("scripting.filesystemobject")
	ParentFolder = objshell.GetParentFolderName(TxtFilePath) 'Get the current folder path
	BaseName = objshell.GetBaseName(TxtFilePath) 'Get the text file name
	WordFilePath = parentFolder & "\" & BaseName & ".docx"  
	Dim objWord
	Set objWord = CreateObject("Word.Application")
	Set objDoc=objWord.Documents.Add()
	With objWord
	   .Visible = False 
	End With
	Set objSelection=objWord.Selection
	objSelection.InsertFile TxtFilePath 
	objDoc.saveas(WordFilePath)
	objDoc.close
	objWord.Quit
End Function 

Function GetWordFile(TxtFilePath) 'This function is to check if the file is a '.txt' file
	Dim objshell
	Set objshell= CreateObject("scripting.filesystemobject")
	Dim Arrs ,Arr
	Arrs = Array("txt")
	Dim blnIsDocFile,FileExtension
	blnIsDocFile= False 
	FileExtension = objshell.GetExtensionName(TxtFilePath)  'Get the file extension
	For Each Arr In Arrs
		If InStr(UCase(FileExtension),UCase(Arr)) <> 0 Then 
			blnIsDocFile= True
			Exit For 
		End If 
	Next 
	GetWordFile = blnIsDocFile
	Set objshell = Nothing 
End Function 

Function StopWordApp 'This function is to stop the Word application
	Dim strComputer,objWMIService,colProcessList,objProcess 
	strComputer = "."
	Set objWMIService = GetObject("winmgmts:" _
		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
	'Get the WinWord.exe
	Set colProcessList = objWMIService.ExecQuery _
		("SELECT * FROM Win32_Process WHERE Name = 'Winword.exe'")
	For Each objProcess In colProcessList
		'Stop it
		On Error Resume Next
		objProcess.Terminate()
	Next
End Function 
Call main 

14) Dateien aus einer Liste mit Dateinamen in einer Textdatei auswählen
Der Schalter liest Dateinamen (Name mit Dateiendung; ein Name pro Zeile) aus einer Textdatei aus und wählt die Dateien aus. Textdatei und auszuwählende Dateien müssen sich im aktuellen Ordner befinden.

Code: Alles auswählen

Function OnClick(ByRef ClickData)
	ClickData.Func.Command.RunCommand("Select NONE")
	Set objFS = CreateObject("Scripting.FileSystemObject") 
	i = 0 : ReDim Preserve Zeile(i)
	For Each file In ClickData.Func.Command.files
		strFilePath = file
		Set objTS = objFS.OpenTextFile(strFilePath) 
		Do While Not (objTS.atEndOfStream)
			i = UBound( Zeile ) + 1 : ReDim Preserve Zeile(i) : Zeile(i) = objTS.Readline 
			ClickData.Func.Command.RunCommand("Select " & """" & Zeile(i) & """" & " EXACT")
		Loop
	Next 
End Function
Hier der Schaltercode um eine entsprechende Textdatei aus ausgewählten Dateien zu erstellen:

Code: Alles auswählen

Clipboard COPYNAMES=nopaths 
Clipboard PASTE AS Dateiliste.txt
Textdateien bearbeiten.zip
(4.2 KiB) 99-mal heruntergeladen

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren

Beitrag von Kundal » 16. Feb 2014 04:32

Ich habe im ersten Beitrag Schaltercode 6) hinzugefügt und bei den Schaltern 2), 3) und 5) den Code korrigiert, da vorher alle im Ordner zur Liste der Dateiendungen passenden Dateien ausgewählt und bearbeitet wurden, statt nur die ausgewählten Dateien.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren

Beitrag von Kundal » 16. Feb 2014 12:49

Update: Im ersten Beitrag die Schalter 7) bis 9) zur Sammlung hinzugefügt.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Kundal » 16. Feb 2014 18:59

Um das Dutzend voll zu machen habe ich 3 weitere Schalter hinzugefügt. Mehr sollen es zu diesem Thema denn auch nicht werden, es sei denn, jemand fragt etwas Spezielles nach oder ich stolpere über eine interessante Vorlage.
Über Feedback, gern auch von Scriptkundigen, die Verbesserungsvorschläge machen möchten, würde ich mich freuen, da ich als Scripting-Amateur gern dazu lerne.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Kundal » 17. Feb 2014 12:30

Ich habe den Code von Schalter 11) so verbessert, dass keine temporäre Textdatei mehr benötigt wird, sondern die Textinhalte direkt in die Zwischenablage kopiert werden (wieder was dazu gelernt :) ).

abr
Berater
Beiträge: 783
Registriert: 10. Apr 2007 02:50
Betriebssystem: Win 10 Home 64bit
Produkt: neueste Betaversion
Version DOpus: Pro
Wohnort: Hamburg

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von abr » 17. Feb 2014 15:26

Interessant finde ich folgende Idee, die einer realen Situation zugrundeliegt:

Einer Sammlung von MP3-Dateien, die nur Namen wie Track01, Track02, etc haben, soll eine Liste der wirklichen Titel, also der realen Songtitel "drübergelegt" werden.
Das heißt, der Name/Titel aus Zeile 1 der Liste soll den Namensteil "Track01" ersetzen, der zweite Name soll "Track02" (oder wie auch immer das im Einzelfall heisst),
ersetzen, und so weiter.

Natürlich muss die Anzahl der Zeilen und die Anzahl der Titel übereinstimmen, damit das funktionieren kann.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Kundal » 17. Feb 2014 21:45

Ich fürchte, ich verstehe nicht so ganz was du meinst. Möchtest du die Dateien auf Basis einer Liste mit Songnamen umbenennen? Dafür gäbe es schon dieses Rename-Script: From file rename script 3.1.
Ansonsten erkläre mal etwas nachvollziehbarer, was du hast und was daraus werden soll.

abr
Berater
Beiträge: 783
Registriert: 10. Apr 2007 02:50
Betriebssystem: Win 10 Home 64bit
Produkt: neueste Betaversion
Version DOpus: Pro
Wohnort: Hamburg

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von abr » 18. Feb 2014 00:04

Kundal, das sieht doch gut aus. Hab mich wohl etwas umständlich ausgedrückt, aber ich will eine Liste von Namen aus einer Textdatei
nehmen, und über eine Auswahl von Dateien umbenennen. Das scheint dieser Code zu machen, danke!

abr
Berater
Beiträge: 783
Registriert: 10. Apr 2007 02:50
Betriebssystem: Win 10 Home 64bit
Produkt: neueste Betaversion
Version DOpus: Pro
Wohnort: Hamburg

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von abr » 18. Feb 2014 00:32

Interessant. Wäre es vielleicht möglich, die Namen aus der Textdatei immer nur hinter jeweils "01 - ", "02 - " etc. einzufügen? Oft kommen die Namenslisten
ja als Trackliste von einer Website (Amazon, Diskografie, etc.), also ohne Nummern. Man müsste die Nummern in der Liste sonst händisch einfügen, sonst wird ja der
Numerierungsteil mit überschrieben.

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Kundal » 18. Feb 2014 09:37

Am einfachsten erstellst du dir einen Schalter mit folgendem Code:

Code: Alles auswählen

Rename PRESET=FromFile-3_1 
Rename NUMBER=01 BY=1 REGEXP PATTERN "(.+)(\..*)" TO "[#] - \1\2" AUTORENAME

abr
Berater
Beiträge: 783
Registriert: 10. Apr 2007 02:50
Betriebssystem: Win 10 Home 64bit
Produkt: neueste Betaversion
Version DOpus: Pro
Wohnort: Hamburg

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von abr » 18. Feb 2014 12:40

Hervorragend. Danke!

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von josinoro » 19. Feb 2014 20:45

Hallo Kundal,

nun habe ich alle Schalter ausprobiert, mit dem Ergebnis, dass bei mir keine Funktion eine Wirkung erzielt.
Getestet wurde unter: Directory Opus Pro 11.0.7.5155 x64 OS 6.1 (B:7601 P:2 T:1) SP 1.0 "Service Pack 1"

Alle Funktionen sind als Scriptfunktionen in Schalter eingebunden. Ich bekomme weder eine Fehlermeldung,
noch wird eine Datei manipuliert, noch erziele ich das gewünschte Ergebnis.

Woran kann das liegen?

Mit freundlichen Grüßen

Josinoro

Benutzeravatar
Kundal
Moderator
Beiträge: 1341
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Kundal » 19. Feb 2014 22:48

Vermutlich ist der Windows Scripting Host auf deinem System deaktiviert. Teste das mal, indem du eine neue Textdatei auf dem Desktop erstellst, in die du folgenden Inhalt kopierst:

Code: Alles auswählen

x = msgbox ("Hallo josinoro!" ,1+16, "Test")
Benenne die Datei anschließend um in Test.vbs und starte sie mit einem Doppelklick. Wenn WSH aktiviert ist, solltest du eine Dialogbox mit dem Titel "Test" und der Nachricht "Hallo josinoro" erhalten. Wenn du eine Fehlermeldung erhältst, liegt es vermutlich daran, dass WSH deaktiviert ist. Eine Lösung dafür findest du z.B. hier: Windows Scripting Host (kurz: WSH) aktivieren.
Es könnte auch sein, dass die Dateiendung *.vbs nicht mit wscript.exe assoziiert ist. Das löst du, indem du einen Rechtsklick auf eine *.vbs-Datei machst und Öffnen mit=>Standardprogramm auswählen...=>Haken bei Dateityp immer mit dem ausgewählten Programm öffnen setzen=>Microsoft (R) Windows Based Script Host auswählst.
Sollte es dann immer noch nicht gehen musst du das Problem mal googeln, da findest du weitere Lösungen, wie das neu registrieren einiger Dll's oder die Neuinstallation von WSH.

josinoro
Beiträge: 166
Registriert: 4. Aug 2013 19:58
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von josinoro » 20. Feb 2014 13:16

Kundal hat geschrieben:Vermutlich ist der Windows Scripting Host auf deinem System deaktiviert. Teste das mal, indem ...
danke für die schnelle Antwort. WSH ist aktiviert, die Messagebox erscheint, wie auch andere Scripte (auch von dir ;-) ) laufen.
Es ist zum Mäusemelken ...

Benutzeravatar
Nobmen
Boardbetreuer
Beiträge: 2828
Registriert: 26. Jun 2004 08:48
Betriebssystem: Win 10 Home/Pro 32/64bit
Produkt: DOpus 12.x + Betas
Version DOpus: Pro

Re: Inhalt von Textdateien modifizieren [Schaltersammlung]

Beitrag von Nobmen » 20. Feb 2014 13:43

wir hatten mal festgestellt das beim kopieren vom komplexen codes aus verschiedenen browsern (nicht immer)
einige Leerzeichen, meist vor dem befehl, gekürzt oder entfernt! werden und somit die ausführung nicht funktioniert.

@kundal
mal als komplettschalter (*.dcf) ablegen?

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste