Autor Beitrag
schubi
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.10.13 09:34 
Heyy,

ich bin mir zwar sehr sehr sicher, dass es zu diesem Thema bestimmt schon eine Antwort gibt. Aber ich habe nun knapp eine Woche verbracht um eine Lösung zu finden, leider erfolglos. Vielleicht suche ich einfach nach den falschen Stichwörtern.

Also zu meinem Problem:

Ich will eine Datei mit Notepad++ öffnen. Dort einen String suchen und diesen dann variabel anpassen und abspeichern.

Bis zum Öffnen der Datei bin ich gekommen, aber ich verzweifel an der Suche nach dem String:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
namespace WindowsFormsApplication1
{
    public partial class Form23 : Form
    {
        Process notepad = new Process();
        public Form23()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            notepad.StartInfo.FileName = @"C:\Programme\Notepad++\notepad++.exe"
            notepad.StartInfo.Arguments = "C:\\Programme\\*"
            //notepad.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
            notepad.Start();
        }
    }
}


Wie gesagt soweit funktioniert es. Ich finde leider auch nichts in Systems.Diagnostics. :?
Wäre super, wenn mir jemand helfen könnte.

Gruß

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 08.10.13 10:11 
Hallo und :welcome:

wenn es dir nur darum geht eine Textdatei zu verändern, dann brauchst du den Umweg über ein externes Programm nicht zu gehen (oder benötigst du zwingend eine bestimmte Suchoption von Notepad++?).

Der einfachere Weg wäre, die Textdatei mittels File.ReadAllLines einzulesen, dort dann in jeder Zeile nach dem zu verändernden Wort suchen (String.IndexOf), dann die einzelne Zeile abzuändern und zuletzt die gesamte Datei wieder mit File.WriteAllLines zu speichern.
(Nichts anderes macht Notepad++ intern auch, nur daß es meines Wissens nach in C++ programmiert ist)

Bei der MSDN gibt es genügend Beispiele zum Lesen und Schreiben von Dateien, z.B.
Gewusst wie: Lesen aus einer Textdatei.

P.S. C#-Code bitte immer in C#-Tags (unter "Bereiche") hier im Forum setzen, danke.
schubi Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.10.13 10:29 
Huch das ging flott.

Ja die Variante hatte ich mir auch schon angeschaut, finde ich prinzipiell auch super und hätte ich echt gerne genommen. Aber leider ist das keine Textdatei. Bedeutet,wenn ich die Datei über diese Methode einlese und danach über File.WriteAllLines ausgebe, dann stimmt nichts mehr.

Die einzige Möglichkeit die ich bis jetzt gefunden habe ist eben mit notepad++. Deswegen auch die Frage nach einer Lösung mit genau dem Programm.

P.S. Ich versuche in Zukunft C#-Tags zu verwenden. Sieht deutlich besser aus.
schubi Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.10.13 12:00 
Für alle die es via Notpad++ probieren möchten:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
            notepad.StartInfo.FileName = @"C:\Programme\Notepad++\notepad++.exe"
            notepad.StartInfo.Arguments = "mydocumentpath"
            //notepad.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
            notepad.Start();
            SendKeys.SendWait("^f");
            SendKeys.SendWait("string before the string you want to change");
            SendKeys.SendWait("{ENTER}");
            SendKeys.SendWait("{ESC}");
            SendKeys.SendWait("{RIGHT}");
            string x;
            while (x != "")
            {
                SendKeys.SendWait("+{RIGHT}");
                SendKeys.SendWait("^c");
                SendKeys.SendWait ("1"); //Ich wollte den Text dort durch 1-er ersetzen
                string x = //hier müsste der Zwischengespeicherte Wert rein ("strg+v")
            }

Ich habe mir deinen Rat noch einmal ans Herz genommen, da das oben geschriebene eher unschön ist:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
byte[] text = System.IO.File.ReadAllBytes(@"mydocumentpath");
 
            for (int count = 0; count < text.Length; count++)
            {       //suche Textstelle
                if (    text[count++] ==  "your bytes"&& text[count++] == "your bytes"...)
                {
                        //Abbruchkriterium fürs einsetzen
                    while (text[count] != "" )
                        text[count++] = "1"//der zu ersetzende Wert
                }
            }
            System.IO.File.WriteAllBytes(@"mydocumentpath", text);



Edit: Kann geschlossen werden.