Ich möchte gerne in rund 1000 txt Dateien nach einem bestimmten Wort suchen, dieses kopieren und in der selben Datei mit der gerade kopierten Zeile/Wort eine andere Zeile/Wort überschreiben.
Der Inhalt von Team (also TTTRE - Krohn Barbour sollte ganz einfach kopiert werden und bei Description="" wieder eingefügt werden.Code:Number=1168889 Team="TTTRE - Krohn Barbour" Driver="Krohn" Description="" Manufacturer=""
Ergenbis wäre dann Description="TTTRE - Krohn Barbour".
Kling einfach aber ich schaffs nicht.Ich habs schon mit notepad++ versucht, dort suche ich mit Team=.* nach dem Inhalt von Team=, aber ich schaffe es nicht dies dann zu kopieren und dann wieder bei Description="" einzufügen.
Wie mache ich das am besten?![]()
+ Antworten
Ergebnis 1 bis 15 von 15
- 02.12.11, 15:31 #1
Bestimmten Text kopieren & Wort ersetzen
Geändert von xoa (02.12.11 um 15:35 Uhr)
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 02.12.11, 17:24 #2
wenn die struktur oben immer gleich ist, könntest du es mit copy und replace machen
Einfach
Team="TTTRE - Krohn Barbour"
Driver="Krohn"
Description=""
suchen und
Team="TTTRE - Krohn Barbour"
Driver="Krohn"
Description="TTTRE - Krohn Barbour"
ersetzen
- 02.12.11, 17:31 #3
Ja, aber der Inhalt von Team ist immer anders, sowie auch die Struktur. Aber trotzdem schon mal Danke für deine Hilfe.
Geändert von xoa (02.12.11 um 18:14 Uhr)
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 02.12.11, 17:42 #4
das wird schwierig ohne programmierung
- 02.12.11, 18:15 #5
Ok, dann werd ich wohl auf die gute alte Copy & Paste Methode zurückgreifen müssen.

Ich komm mit nem Macro mittlerweile schon soweit, dass er nach "Team=.*" sucht, dann bookmarked, in die zwischenablage kopiert, dann suche ich nach Description="" und bookmarke das, aber jetzt müsste ich nur noch irgendwie den Inhalt der Zwischenablage in das replace-Feld hineinbekommen.Geändert von xoa (02.12.11 um 18:24 Uhr)
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 02.12.11, 18:24 #6
Bei 1000 Dateien Copy & Paste von Hand ?
Frage: sind die alle in einem Ordner ?
Wenn ja könnt ich dir kurz n kleines Programm schreiben..... bei 1000 Dateien krepiert man ja sonst
Geändert von pointX (02.12.11 um 18:34 Uhr)
2500K, Z68-V, Team 8GB 1333, 1TB Samsung F3, Ninja 3, CM-500W

<codec> root kann mein heim zerstören, mich aus dem system aussperen. Aber nur Gott allein entscheidet, ob ich nach /dev/null/ oder nach /var/log/ komme
- 02.12.11, 18:51 #7
Nein, die Dateien sind alle in verschiedenen Ordnern, so jeweils in 2-3 Unterordner.
Wenn du das machen könntest wäre dan natürlich hervorragend und ich wäre dir sehr dankbar.
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 02.12.11, 19:10 #8
Naja ich kanns ja mal versuchen.......... bin grad am einlernen in RegEx mit C# von dem her passts sogar

das ist auf jedenfall immer in den Textdateien drin ?Code:Team="irgendwas" bla bla bla Description=""
Geändert von pointX (02.12.11 um 19:14 Uhr)
2500K, Z68-V, Team 8GB 1333, 1TB Samsung F3, Ninja 3, CM-500W

<codec> root kann mein heim zerstören, mich aus dem system aussperen. Aber nur Gott allein entscheidet, ob ich nach /dev/null/ oder nach /var/log/ komme
- 02.12.11, 19:27 #9
Ja genau!
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 02.12.11, 21:03 #10
Aus deinem Beispiel macht mein bisheriger Ansatz folgendes:
korrekt ?Code:Number=1168889 Team="TTTRE - Krohn Barbour" Driver="Krohn" Description="TTTRE - Krohn Barbour" Manufacturer=""
Geändert von pointX (02.12.11 um 21:29 Uhr)
2500K, Z68-V, Team 8GB 1333, 1TB Samsung F3, Ninja 3, CM-500W

<codec> root kann mein heim zerstören, mich aus dem system aussperen. Aber nur Gott allein entscheidet, ob ich nach /dev/null/ oder nach /var/log/ komme
- 02.12.11, 21:20 #11
Ja genau, so sollte das sein.
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 02.12.11, 21:46 #12
Ok, just try it

Im Anhang 2 Dateien, 1x die Exe und 1x die Config-Datei.
Beide müssen in einem Ordner liegen.
In der Config-Datei gibst du nun den Ordner an, in welchem deine Textdateien liegen.
Das Programm ersetzt nun den Inhalt der Textdateien - d.h. keine Sicherungskopie, die solltest du vorher machen
Und es wird unterhalb des Ordners, den du angibst, ein Logfile namens "replacelog" gemacht, in dem alle Dateien gelistet werden, in denen etwas ersetzt wird.
Aber mach auf jedenfall vorher eine Sicherung. Ich garantiere für nichts, Benutzung auf eigene Gefahr ^^
Hier mein Programmcode, das ganze ist in C# programmiert.
Code:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.IO; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { public static string dir; public static Regex search; public static Regex replace; static void Main(string[] args) { dir = System.Configuration.ConfigurationManager.AppSettings.Get("dir"); // Verzeichnis aus Config lesen DirectoryInfo di = new DirectoryInfo(dir); // verzeichnis prüfen string logfilepath = di.FullName + "\\replacelog"; // Pfad zu Logfile StreamWriter logfile = File.CreateText(logfilepath); // Logfile erstellen string pattern1 = "Team=\"([^\n]*)\"(.*)Description=\"\""; // Regex Suche search = new Regex(pattern1,RegexOptions.Singleline); // Regex ListFiles files = new ListFiles(); // Alle .txt-Dateien im Ordner auswählen List<string> filearray = files.GetFileList(dir, false); // Pfade der txt-Dateien in ein Array speichern foreach (string f in filearray) // für jede Textdatei { StreamReader myFile = new StreamReader(f); // Datei bearbeiten string content = myFile.ReadToEnd(); // Datei lesen myFile.Close(); // lesen beenden string replace = search.Replace(content,"Team=\"$1\"$2Description=\"$1\""); // Ersetzen if (replace != content) // wenn etwas ersetzt wurde, also der ersetzte text nicht mit dem Original gleich ist { StreamWriter myWriter = new StreamWriter(f, false); // Datei mit ersetztem Inhalt schreiben myWriter.Write(replace); // Inhalt schreiben Console.WriteLine(f.ToString()); // Auf der Konsole den Pfad ausgeben logfile.WriteLine(f.ToString()); // In die Logdatei den Pfad schreiben myWriter.Close(); // schreiben beenden } } logfile.Close(); // logfile schließen Console.WriteLine("Ende. Enter drücken zum schließen."); // Konsolenausgabe - ende Console.ReadLine(); // Konsole anhalten, um Ergebnis anschauen zu können } } public class ListFiles // Hilfsklasse, siehe http://dotnet-snippets.de/dns/alle-dateien-eines-ordners-auflisten---c-version---SID627.aspx { /// <summary> /// Creates a list which contains all filenames in a specific folder /// </summary> /// <param name="Root">Folder which contains files to be listed</param> /// <param name="SubFolders">True for scanning subfolders</param> /// <returns></returns> public List<string> GetFileList(string Root, bool SubFolders) { List<string> FileArray = new List<string>(); try { string[] Files = System.IO.Directory.GetFiles(Root,"*.txt"); string[] Folders = System.IO.Directory.GetDirectories(Root); for (int i = 0; i < Files.Length; i++) { FileArray.Add(Files[i].ToString()); } if (SubFolders == true) { for (int i = 0; i < Folders.Length; i++) { FileArray.AddRange(GetFileList(Folders[i], SubFolders)); } } } catch (Exception Ex) { throw (Ex); } return FileArray; } } }2500K, Z68-V, Team 8GB 1333, 1TB Samsung F3, Ninja 3, CM-500W

<codec> root kann mein heim zerstören, mich aus dem system aussperen. Aber nur Gott allein entscheidet, ob ich nach /dev/null/ oder nach /var/log/ komme
- 02.12.11, 22:19 #13
Wow
, vielen Dank für deine Mühe. Werd ich sofort ausprobieren. 
EDIT: Scheint noch ein kleines Problem zu geben, Pfad ist korrekt eingetragen, nur wenn ich die .exe ausführe steht "Ende. Enter drücken zum schließen", aber in den Dateien hat sich nichts geändert. ;-)
EDIT 2: Ah, Problem gefunden. Es wird nach .txt Dateien gesucht, ich hab aber .veh (sind aber im grunde .txt Dateien). Ich werd die einfach nach .txt ändern. Moment....
EDIT 3: Hat wunderbar funktioniert. Vielen Dank nochmals
Geändert von xoa (02.12.11 um 22:39 Uhr)
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 14.01.12, 17:44 #14
Ich hol den Thread nochmals hervor.
Und zwar möchte ich jetzt mehrere Zeilen ersetzen die immer das selbe Muster haben, aber in der Mitte unteschiedlich sind. Sieht folgendermaßen aus:
INSTANCE=BACKFIRE
{
MOVEABLE=TRUE
MESHFILE=LOTUS_EXIGE_BACKFIRE.GMT COLLTARGET=FALSE HATTARGET=FALSE LODIN=(0.0) LODOUT=(175.0) SHADOWRECEIVER=FALSE
}
Dort wo der Stern * ist, steht immer etwas anderes. Der Rest ist gleich. Kann man das mit regulärem Ausdruck hinkriegen?INSTANCE=BACKFIRE
{
MOVEABLE=TRUE
MESHFILE=*
}
Vielen Dank.
Intel i5 2500k @ 4,30 GHz @ Heatkiller Rev3.0 || EVGA Z68 SLI || Nvidia 570 GTX @ Heatkiller GPU-X³ || Avexir Blitz DDR3-1600 16GB || Crucial M4 64GB || Seagate 7200.12 1TB || Windows 7 x64
- 17.01.12, 00:47 #15Gefreiter
- Registriert seit
- 12.01.2011
- Beiträge
- 33
Servus
Sed - An Introduction and Tutorial by Bruce Barnett
unter windows musst du doppelte anführungszeichen benutzen, nicht die einfachen wie in den beispielen
lade dir sed for Windows runter, binaries + dependencies, oder wie ich, den installer
erstelle nun ein sed skript und passe es an, speichere es als .txt o. .sed
Code:/INSTANCE=BACKFIRE/,/}/ { s/INSTANCE=BACKFIRE/INSTANCE=REBOUND/ s/MOVEABLE=TRUE/MOVEABLE=WHATEVER/ }
nund zuerst probelauf, dann ...
alsoCode:F:\tmp\sed>"C:\Program Files (x86)\GnuWin32\bin\sed.exe" -f skript.sed *.GEN | findstr "WHATEVER RE OUND" INSTANCE=REBOUND MOVEABLE=WHATEVER INSTANCE=REBOUND MOVEABLE=WHATEVER INSTANCE=REBOUND MOVEABLE=WHATEVER INSTANCE=REBOUND MOVEABLE=WHATEVER INSTANCE=REBOUND MOVEABLE=WHATEVER F:\tmp\sed>"C:\Program Files (x86)\GnuWin32\bin\sed.exe" -i.backup -f skript.sed *.GEN F:\tmp\sed>dir Datenträger in Laufwerk F: ist DATA Volumeseriennummer: 90FA-0800 Verzeichnis von F:\tmp\sed 17.01.2012 00:38 <DIR> . 17.01.2012 00:38 <DIR> .. 17.01.2012 00:27 117 begin-end-1.sed 17.01.2012 00:38 8.258 PACECAR-2.GEN 17.01.2012 00:37 8.258 PACECAR-2.GEN.backup 17.01.2012 00:38 8.106 PACECAR.GEN 17.01.2012 00:37 8.106 PACECAR.GEN.backup 17.01.2012 00:38 8.258 sed0m9l5Q 17.01.2012 00:38 8.106 sed4WSDdy 17.01.2012 00:37 8.106 sed6OtHas 17.01.2012 00:37 8.258 sedlS5ohO 17.01.2012 00:31 117 skript.sed 10 Datei(en), 65.690 Bytes 2 Verzeichnis(se), 103.296.196.608 Bytes frei
sed -i.backupdateiendung -f deinskript *.deinedateien
brauchst nix zu kompielieren

LinkBack URL
About LinkBacks
Zitieren

