Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Замена одного значения подстроки на другое

Ответить
Настройки темы
.NET - Замена одного значения подстроки на другое

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


необходимо сделать следующее:

- на форме должны быть 2 кнопки ("Обзор" и "Заменить"), 2 текстбокса ("Что найти" и "На что заменить");
- по нажатию на кнопку "Обзор" появляется меню, где выбирается путь к папке с файлами (вроде через OpenFileDialog можно сделать);
- в текстбоксе "Что найти" указываем то что нужно искать в файле, в текстбоксе "На что заменить" указываем на что нужно заменить то, что указали в текстбоксе "Что найти";
- по нажатию на кнопку "Заменить" каждый файл из выбраной папки построчно считывается, ищется то что было в текстбоксе "Что найти", заменяется на то что было в текстбоксе "На что заменить" и файл сохраняется.

И так необходимо сделать со всеми файлами выбранной папки.

Отправлено: 21:32, 26-06-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Futtoto, что из перечисленного Вы уже реализовали? Что вызывает затруднения?

Отправлено: 22:40, 26-06-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


создал форму, на ней разместил 2 кнопки и 2 текстбокса.
по нажатию на кнопку Обзор появляется меню и можно выбрать папку с файлами.
далее двум строкам присвоил значения того что вводится в текстбоксы:
string find = textBox1.Text;
string replaceFind = textBox2.Text;

что делать дальше не знаю ((

по идее нужно создать массив и поместить туда все файлы из выбранной папки, затем выполнить цикл, в котором каждый файл из массива будет открываться, в нем искаться значение из текстбокса "Что найти", заменяться на то что было в текстбоксе "На что заменить"

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Zamena
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string find = textBox1.Text;
string replaceFind = textBox2.Text;
string fullFileName;
using (OpenFileDialog dlg = new OpenFileDialog())
{
if (dlg.ShowDialog() == DialogResult.OK)
fullFileName = dlg.FileName;

}

}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void textBox2_TextChanged(object sender, EventArgs e)
{

}

private void button2_Click(object sender, EventArgs e)
{


}

}
}

Отправлено: 23:15, 26-06-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Вам нужен не OpenFileDialog - класс (System.Windows.Forms), а FolderBrowserDialog - класс (System.Windows.Forms). Создавать массив не нужно совершенно, нужно рекурсивно пройтись по всем каталогам, начиная с выбранного, перебирая файлы. Во время перебора именно так:
Цитата Futtoto:
каждый файл из массива будет открываться, в нем искаться значение из текстбокса "Что найти", заменяться на то что было в текстбоксе "На что заменить" »
…и сохраняться.

Отправлено: 00:34, 27-06-2016 | #4


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


ну а как это все сделать? покажите пожалуйста пример кода. я совсем-совсем новичок в программировании, меня никто не учил... все что нужно пытаюсь нагуглить, но пока безуспешно((

Отправлено: 06:40, 27-06-2016 | #5


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата Futtoto:
покажите пожалуйста пример кода.
Iska Вам озвучил общий алгоритм действий, так что показывать там особо нечего. Но если Вам непременно нужен код, то в самом простом виде это будет выглядеть так:
Код: Выделить весь код
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.Text.RegularExpressions;

[assembly: AssemblyTitle("Replacing")]

namespace Replacing {
  internal sealed class AssemblyInfo {
    private  Type a;
    internal AssemblyInfo() { a = typeof(Program); }
    
    internal String Title {
      get {
        return ((AssemblyTitleAttribute)Attribute.GetCustomAttribute(
            a.Assembly, typeof(AssemblyTitleAttribute)
        )).Title;
      }
    }
  }
  
  internal sealed class frmMain : Form {
    public frmMain() {
      InitializeComponent();
      this.Text = new AssemblyInfo().Title;
    }
    
    private String folder; //здесь хранится путь до выбранной папки
    
    private Label    lblLabel1;
    private Label    lblLabel2;
    private TextBox    txtBox1;
    private TextBox    txtBox2;
    private Button  btnButton1;
    private Button  btnButton2;
    
    private void InitializeComponent() {
      this.lblLabel1  = new Label();
      this.lblLabel2  = new Label();
      this.txtBox1    = new TextBox();
      this.txtBox2    = new TextBox();
      this.btnButton1 = new Button();
      this.btnButton2 = new Button();
      //
      //lblLabel1
      //
      this.lblLabel1.Height = 13;
      this.lblLabel1.Location = new Point(7, 7);
      this.lblLabel1.Text = "Что ищем:";
      //
      //lblLabel2
      //
      this.lblLabel2.Height = 13;
      this.lblLabel2.Location = new Point(7, 51);
      this.lblLabel2.Text = "На что заменяем:";
      //
      //txtBox1
      //
      this.txtBox1.Location = new Point(7, 25);
      this.txtBox1.Width = 313;
      //
      //txtBox2
      //
      this.txtBox2.Location = new Point(7, 69);
      this.txtBox2.Width = 313;
      //
      //btnButton1
      //
      this.btnButton1.Location = new Point(33, 101);
      this.btnButton1.Text = "Обзор...";
      this.btnButton1.Click += (s, e) => {
        using (FolderBrowserDialog fbd = new FolderBrowserDialog()) {
          if (fbd.ShowDialog() == DialogResult.OK) {
            folder = fbd.SelectedPath;
          }
        }
      };
      //
      //btnButton2
      //
      this.btnButton2.Location = new Point(213, 101);
      this.btnButton2.Text = "Заменить";
      this.btnButton2.Click += (s, e) => {
        if (String.IsNullOrEmpty(folder) ||
            String.IsNullOrEmpty(txtBox1.Text) ||
            String.IsNullOrEmpty(txtBox2.Text)) {
          MessageBox.Show(
            "Ничего не выбрано, идите лесом!", "Ошибка",
            MessageBoxButtons.OK, MessageBoxIcon.Error
          );
          return;
        }
        
        foreach (String file in Directory.EnumerateFiles(
          folder, "*.txt", SearchOption.AllDirectories //ищем все txt файлы
        )) {
          String content = File.ReadAllText(file, Encoding.Default);
          String n_content = Regex.Replace(content, txtBox1.Text, txtBox2.Text);
          File.WriteAllText(file, n_content);
        }
      };
      //
      //frmMain
      //
      this.ClientSize = new Size(330, 170);
      this.Controls.AddRange(new Control[] {
        this.lblLabel1, this.lblLabel2, this.txtBox1,
        this.txtBox2, this.btnButton1, this.btnButton2
      });
      this.FormBorderStyle = FormBorderStyle.FixedSingle;
      this.MaximizeBox = false;
      this.StartPosition = FormStartPosition.CenterScreen;
    }
  }
  
  internal sealed class Program {
    [STAThread]
    static void Main() {
      Application.EnableVisualStyles();
      Application.Run(new frmMain());
    }
  }
}

Отправлено: 11:20, 27-06-2016 | #6


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


у меня этот код нифига не работает... студия ошибки выдает

Ошибка 1
Пространство имен "WindowsFormsApplication6" уже содержит определение для "Program"
Файл - D:\C#\WindowsFormsApplication6\WindowsFormsApplication6\Program.cs

Ошибка 2
"WindowsFormsApplication6.Program": класс не может быть одновременно статическим и запечатанным
Файл - D:\C#\WindowsFormsApplication6\WindowsFormsApplication6\Form1.cs

Отправлено: 14:17, 27-06-2016 | #7


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Дык а голова на что? Код за Вас накидали, Вы его тупо скопипастили и пытаетесь собрать в тухлой VS, которая и нафиг не нужна: только место занимает, да жрет системные ресурсы. Собирайте из комстроки, например:
Код: Выделить весь код
D:\proj> D:\Windows\Microsoft.NET\vXXXX\csc.exe /nologo /t:winexe /out:replacing.exe /optimize+ /debug:pdbonly replacing.cs
Где XXXX - версия .NET, ну и конечно на будущее: если копипастите, не бздите, что код не работает, в противном случае рискуете быть гонимым ссаными тряпками.
Удачи!

Отправлено: 17:08, 27-06-2016 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Замена одного значения подстроки на другое

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Подсчет слов и нахождение заданного слова, замена и его замена на другое. zeroua Скриптовые языки администрирования Windows 9 13-06-2014 15:22
CMD/BAT - [решено] Замена подстроки micolo Скриптовые языки администрирования Windows 3 05-03-2014 15:58
CMD/BAT - [решено] Сравнение файлов и замена значения из одного файла в другой. Aleks911tat Скриптовые языки администрирования Windows 12 25-08-2012 22:27
Использование - [решено] Как переоформить лицензию Майкрософт с одного ю.л. на другое? chesster_os Лицензирование продуктов Microsoft 6 12-09-2011 14:57
C/C++ - [решено] Поиск и замена в тексте (извлечение подстроки) dima1981 Программирование и базы данных 10 21-03-2010 15:50




 
Переход