Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Text vor einen bestimmten Textabschnitt in Datei einfügen

Frage Entwicklung VB for Applications

Mitglied: suffix

suffix (Level 1) - Jetzt verbinden

17.04.2007, aktualisiert 18.04.2007, 6615 Aufrufe, 6 Kommentare

Hallo,

habe versucht eine Textzeile in einen vorhandenen INI-Datei einzufügen, jedoch wird entweder der ganze Text in der INI gelöscht oder die Textzeile wird an´s Ende des Text gestellt.
Wie kann ich eine Textzeile in eine vorhandene Textdatei vor einen bestimmten Text einfügen, ohne dass der gesamte Inhalt gelöscht wird.


......text

.....einzufügende Textzeile (vor ....."bestimmter Text")

......bestimmter Text


"bestimmter Text" steht an unterschiedlichen Zeilen.

Vielen Dank im Voraus für eure Hilfe

suffix
Mitglied: risc2000
17.04.2007 um 23:59 Uhr
Hi suffix, in der Regel kann sowas mit einem Stream Editor gelöst werden. Ich weis nicht ob es in Windows einen gibt, aber für Unix Systeme kann das mit sed gelöst werden (http://de.wikipedia.org/wiki/Sed_%28Unix%29). Falls Windows keine Möglichkeiten dafür bereit stellt, google mal nach unxutils.zip. Darin müsste sich die sed.exe für Windows befinden. Mit dieser kannst du dann in einer *.txt Datei, Texte einfügen bzw. ersetzen.

Ein kleines Beispiel:

Gegeben ist folgende *.ini Datei: (Der Name der Datei ist "test.ini")

Zeile1
Zeile2
Zeile3
Zeile4
Zeile5
Zeile6
Wenn du jetzt vor Zeile 4 einen Text einfügen möchtest, dann in der Konsole folgenden Befehl ausführen:

sed 's/Zeile4/vor Zeile 4\nZeile4/g' test.ini > neue_ini_datei.ini

Der Inhalt der Datei "neue_ini_datei.ini" wäre dann:

Zeile1
Zeile2
Zeile3
vor Zeile 4
Zeile4
Zeile5
Zeile6
Bitte warten ..
Mitglied: bastla
18.04.2007 um 01:08 Uhr
Hallo suffix!

Vorweg ein Versuch als Batch:
01.
@echo off & setlocal 
02.
set "SuchText=bestimmter Text" 
03.
set "Neu=einzufügender Text" 
04.
set "Q=D:\Alte.ini" 
05.
set "Z=D:\Ganz neue.ini" 
06.
If exist "%Z%" del "%Z%" 
07.
for /f "usebackq delims=" %%i in ("%Q%") do call :CheckLine "%%i" 
08.
goto :eof 
09.
:CheckLine 
10.
echo %1|findstr /i "%SuchText%" >nul && echo %Neu%>>"%Z%" 
11.
(echo %~1)>>"%Z%"
Da ich mir nicht ganz sicher war, ob der "bestimmte Text" alleine in einer Zeile steht oder nur in der Zeile vorkommen muss, habe ich Letzteres unterstellt und auch keine Unterscheidung Groß-/Kleinschreibung vorgenommen.

In VBS würde die analoge Vorgangsweise (mit dem Vorteil, dass hier auch Leerzeilen in die Zieldatei übernommen werden) etwa so aussehen:
01.
Const SuchText = "bestimmter Text" 
02.
Const Neu = "einzufügender Text" 
03.
Const Q = "D:\Alte.ini" 
04.
Const Z = "D:\Ganz neue.ini" 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Set OldFile = fso.OpenTextFile(Q, 1) 
07.
Lines = Split(OldFile.ReadAll, vbCrLF) 
08.
OldFile.Close 
09.
Set NewFile = fso.OpenTextFile(Z, 2, True) 
10.
For i = 0 To UBound(Lines) 
11.
	If Instr(LCase(Lines(i)), LCase(SuchText)) Then NewFile.WriteLine Neu 
12.
	NewFile.WriteLine Lines(i) 
13.
Next 
14.
NewFile.Close
In beiden Fällen dient die Belegung der Konstanten zu Beginn einer Vereinfachung des Testens - natürlich wäre hier in weiterer Folge die Übernahme von Argumenten aus dem Aufruf des Scripts vorzusehen. Auch auf das Überprüfen auf Vorhandensein der Quelldatei habe ich für's Erste verzichtet.

Grüße
bastla

[Edit] Wenn ich die Augen noch weit genug aufgebracht hätte, um schon vorher oberhalb des Beitrages "Visual Basic, VBA und .Net" zu lesen, hätte ich mir den Batch-Ansatz sparen können ... [/Edit]
Bitte warten ..
Mitglied: suffix
18.04.2007 um 08:47 Uhr
Hallo bastla,

vielen Dank für Deine Antwort.
Das VBScript funktioniert mit dem "festen" Pfad, nur wie bekommen ich anstatt dem "festen" Pfad den variablen Pfad in´s Script?

*
set WshShell = WScript.CreateObject("WScript.Shell")
strWorkDir = WshShell.SpecialFolders("AppData") & "\xxxxx\bb.INI"

Const SuchText = "blablabla"
Const Neu = "ahaahaha"
Const Q = "C:\Dokumente und Einstellungen\admin\Anwendungsdaten\xxxxx\bb.INI"

Const Z = "C:\Dokumente und Einstellungen\admin\Anwendungsdaten\xxxxx\bb.INI"
Set fso = CreateObject("Scripting.FileSystemObject")
Set OldFile = fso.OpenTextFile(Q, 1)
Lines = Split(OldFile.ReadAll, vbCrLF)
OldFile.Close
Set NewFile = fso.OpenTextFile(Z, 2, True)
For i = 0 To UBound(Lines)
If Instr(LCase(Lines(i)), LCase(SuchText)) Then NewFile.WriteLine Neu
NewFile.WriteLine Lines(i)
Next
NewFile.Close


wenn ich jetzt für die Const Z oder Q = "strWorkDir" eintrage, dann funktioniert das leider nicht. Hast Du da noch einen Tipp für mich. Danke Dir schon mal im Voraus für die Info.

Gruß

suffix
Bitte warten ..
Mitglied: Biber
18.04.2007 um 09:24 Uhr
@bastla

Dein Skriptansatz wird trotzdem nicht verschwendet gewesen sein.
Auch das Thema "Ini-Editor als Batch und VBS-Skript" habe ich schon eine Zeitlang auf der (kurzen) Liste der geplanten Tutorials für das Forum.

Für ganz Eilige sei angemerkt, dass es derartige Tools natürlich auch schon fertig als Freewaretools gibt - die nennen sich dann entsprechend "IniEdit" oder "IniTools" oder ähnlich Naheliegendes.

Gruss
Biber
[Edit] Noch ein nachgereichter Link zum Tool "IniFile" von den sehr empfehlenswerten "Horst Schaeffer's Software Pages" IniFile.zip.
Und den setze ich auch endlich mal auf "Empfohlene Links" in Batch & Shell...
[/Edit]
Bitte warten ..
Mitglied: bastla
18.04.2007 um 12:16 Uhr
Hallo suffix!

Lass einfach das "Const" weg, dann sind es ganz gewöhnliche Variable.

Für die Übergabe von Argumenten steht die "http://msdn.microsoft.com/library/en-us/script56/html/dfa1ed1c-d88e-415 ... WScript.Arguments">rel="nofollow" href="http://msdn.microsoft.com/library/en-us/script56/html/dfa1ed1c-d88e-415a-b2cc-958eb6a12c38.asp" title="http://msdn.microsoft.com/library/en-us/script56/html/dfa1ed1c-d88e-415a-b2cc-958eb6a12c38.asp" onclick="window.open(this.href); return false;">http://msdn.microsoft.com/library/en-us/script56/html/dfa1ed1c-d88e-415 ... WScript.Arguments"-Auflistung zur Verfügung.

Im Übrigen:
http://www.microsoft.com/germany/technet/datenbank/articles/600359.mspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script ...
bzw offline: http://www.microsoft.com/downloads/details.aspx?familyid=01592C48-207D- ... oder script56de.chm suchen.

Grüße
bastla
Bitte warten ..
Mitglied: suffix
18.04.2007 um 20:37 Uhr
Hallo bastla,

habe es doch noch mit strWorkDir geschaft. Vielen Dank für Deine Tipps und Mühe.

Gruß

suffix
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Text an bestimmter Stelle einfügen
gelöst Frage von noob-xBatch & Shell2 Kommentare

Hallo bin mal wieder am Basteln, komm aber nicht weiter wie stelle ich es an dass nummer 1 immer ...

Batch & Shell
Batchdatei: Datei nach bestimmten Zeilen durchsuchen und in anderer Datei einfügen
Frage von Vit1985Batch & Shell1 Kommentar

Hallo, ich möchte mit einem batch aus einer *.msg Datei 4 Zeilen heraussuchen und diese Zeilen sollen dann in ...

Basic
Variablen Text einfügen
gelöst Frage von TheFalconBasic14 Kommentare

Hallo zusammen, ich hab ein Makro, welches automatisch eine E-MAil verschickt nachdem man in einer Message Box einen Text ...

VB for Applications
VBS Textzeile in fsx.cfg Datei an bestimmte Stelle einfügen
gelöst Frage von aletriVB for Applications6 Kommentare

Guten Abende Leute Mit dem hier aufgeführten Script möchte ich den Text "AutogenDescriptionsFilename=AutogenDescriptions_EFRO.xml" einfügen was soweit auch mit der ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 6 StundenLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 2 TagenMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows 10
Alle Programme mit bestimmtem Namen automatisch (per GPO) deinstallieren
gelöst Frage von lordofremixesWindows 1012 Kommentare

Hallo zusammen, gibt es eine Möglichkeit, alle Programme beginnend mit z.B. "Dell" im Namen per Script und somit per ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux12 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...