none
Стереть буквенный текст в смешанном наборе данных

    Вопрос

  • Здравствуйте! Подскажите пожалуйста, мне нужно в цикле через каждые пять строчек удалять буквенный текст в массиве данных, есть отдельные строчки, которые я удаляю Response(), язык C#(Forms), есть вставленный текст, который нужно как-то удалить, наверное циклом и есть кусок массива, который тоже нужно стереть, но он состоит из букв и цифр.

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

    В заранее благодарен! 

    9 марта 2019 г. 18:39

Ответы


  • Нужно вычленить строку и записать её без букв или вообще стереть.

    Признаком того, что последовательность символов является новой строкой, является наличие символов переноса \r и \n коды 13 и 10 в начале новой и в конце старой строки.

    string fileTXT =   File.ReadAllText(path) ="1 row\r\n 2 row";
     string stroka = "q45fg  jj01"; // из источника данных
            string strokaNoLetter = "" ; //строка без букв
        // дописать код вычленяющий новую строку
    // следующий код убирает a-z
            for (int i = 0; i < stroka.Length; i++)
    
                if (stroka[i] > 96 && stroka[i] < 123 ) 
                {
                    // буквы a - z для A-Z и для кириллицы свои коды
                    continue;
                }
                else
                { 
                    strokaNoLetter = strokaNoLetter + stroka[i].ToString();
                }
    
    //strokaNoLetter = 4501;
    
    // дописать код собирающий файл с измененными или без удаленных строк.


    Фоновое изображение


    • Изменено Yuri Evseenkov 12 апреля 2019 г. 6:23
    • Помечено в качестве ответа georgushek 13 апреля 2019 г. 6:06
    12 апреля 2019 г. 6:10
  • Я просто думал универсальный, а не аналитический способ удалить весь текст, кроме чисел. 

    О какой аналитике идет речь? Вот легко нашла код, как заменить гласные буквы на *

    const string pattern = @"[аоиеёэыуюя]";

    const string target = @"*";

    Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);

    return regex.Replace(source, target);

    В вашем случае регулярное выражение будет другим и замена на пустую строку.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Windows.Forms;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    
    namespace Time_Screen
    {
        public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Close();
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
               
    
                 if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string line = null;
                    int line_number = 0;
                    int line_to_delete = 7;
                   
                        // using (StreamWriter writer = new StreamWriter("Дата.txt")) {
                      
                        //  writer.WriteLine(line);
    
                        var FileName = "Дата.txt";
                        var oldText = File.ReadAllText(FileName);
    
                        var newText = oldText.Replace("цуукк, " ") != null)
                       // {
    
                         //   line_to_delete++;
                           /* if (line_number == line_to_delete)
                                continue; */
    
                        File.WriteAllText(FileName, newText/*Remove(43,2)*/);
    
    
    
                           Name = openFileDialog1.FileName;
    
                        }
               
    
                 textBox1.Lines = File.ReadAllLines(openFileDialog1.FileName);
    
    
    
                    }
                }
    
    
    
    
    
    
    
    
            }
    
    
        
    
    
    Я делаю подобным образом, но этого не достаточно, потому что у меня удаляется текст, через каждые 5 строчек, а потом вообще удаляется целый массив букв, цифр и знаков, кроме того у меня где-то удаляются , только буквы, а где -то буквы с цифрами. и не обязательно через 5 строчек., это наверное должно быть несколько циклов и отдельно удаляться смешанный массив в конце файла.


    • Изменено georgushek 10 апреля 2019 г. 20:48
    • Помечено в качестве ответа Антон В АнтоновModerator 11 апреля 2019 г. 11:24
    • Снята пометка об ответе georgushek 11 апреля 2019 г. 19:35
    • Помечено в качестве ответа georgushek 14 апреля 2019 г. 6:53
    10 апреля 2019 г. 20:37

Все ответы

  • Приветствую.

    В чем затык, вы хотите что бы вам написали код за вас?


    Я не волшебник, я только учусь MCP, CCNA. Если Вам помог чей-либо ответ, пожалуйста, не забывайте нажать на кнопку "Пометить как ответ" или проголосовать за полезное сообщение. Мнения, высказанные здесь, являются отражением моих личных взглядов, а не позиции работодателя. Вся информация предоставляется как есть без каких-либо гарантий. Блог IT Инженера, Twitter, YouTube, GitHub, Instagram

    9 марта 2019 г. 19:44
    Модератор
  • Выборочные удаления такого формата обычно делают через регулярные выражения. Вам просто нужно написать несколько и применять их в цикле.
    10 марта 2019 г. 5:59
  • Я просто думал универсальный, а не аналитический способ удалить весь текст, кроме чисел. 
    10 марта 2019 г. 12:50
  • Я просто думал универсальный, а не аналитический способ удалить весь текст, кроме чисел. 

    О какой аналитике идет речь? Вот легко нашла код, как заменить гласные буквы на *

    const string pattern = @"[аоиеёэыуюя]";

    const string target = @"*";

    Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);

    return regex.Replace(source, target);

    В вашем случае регулярное выражение будет другим и замена на пустую строку.
    10 марта 2019 г. 14:11
  • Я просто думал универсальный, а не аналитический способ удалить весь текст, кроме чисел. 

    О какой аналитике идет речь? Вот легко нашла код, как заменить гласные буквы на *

    const string pattern = @"[аоиеёэыуюя]";

    const string target = @"*";

    Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);

    return regex.Replace(source, target);

    В вашем случае регулярное выражение будет другим и замена на пустую строку.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Windows.Forms;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    
    namespace Time_Screen
    {
        public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Close();
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
               
    
                 if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string line = null;
                    int line_number = 0;
                    int line_to_delete = 7;
                   
                        // using (StreamWriter writer = new StreamWriter("Дата.txt")) {
                      
                        //  writer.WriteLine(line);
    
                        var FileName = "Дата.txt";
                        var oldText = File.ReadAllText(FileName);
    
                        var newText = oldText.Replace("цуукк, " ") != null)
                       // {
    
                         //   line_to_delete++;
                           /* if (line_number == line_to_delete)
                                continue; */
    
                        File.WriteAllText(FileName, newText/*Remove(43,2)*/);
    
    
    
                           Name = openFileDialog1.FileName;
    
                        }
               
    
                 textBox1.Lines = File.ReadAllLines(openFileDialog1.FileName);
    
    
    
                    }
                }
    
    
    
    
    
    
    
    
            }
    
    
        
    
    
    Я делаю подобным образом, но этого не достаточно, потому что у меня удаляется текст, через каждые 5 строчек, а потом вообще удаляется целый массив букв, цифр и знаков, кроме того у меня где-то удаляются , только буквы, а где -то буквы с цифрами. и не обязательно через 5 строчек., это наверное должно быть несколько циклов и отдельно удаляться смешанный массив в конце файла.


    • Изменено georgushek 10 апреля 2019 г. 20:48
    • Помечено в качестве ответа Антон В АнтоновModerator 11 апреля 2019 г. 11:24
    • Снята пометка об ответе georgushek 11 апреля 2019 г. 19:35
    • Помечено в качестве ответа georgushek 14 апреля 2019 г. 6:53
    10 апреля 2019 г. 20:37
  •  Приветствую.

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

    string stroka = "q45fgjj01"; // из источника данных string strokaNoLetter = "" ; //строка без букв for (int i = 0; i < stroka.Length; i++) if (stroka[i] > 97 && stroka[i] < 123 ) { // буквы a - z для A-Z и для кириллицы свои коды continue; } else { strokaNoLetter = strokaNoLetter + stroka[i].ToString(); }

    //strokaNoLetter = 4501;



    Фоновое изображение


    11 апреля 2019 г. 7:15
  •  Приветствую.

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

    string stroka = "q45fgjj01"; // из источника данных string strokaNoLetter = "" ; //строка без букв for (int i = 0; i < stroka.Length; i++) if (stroka[i] > 97 && stroka[i] < 123 ) { // буквы a - z для A-Z и для кириллицы свои коды continue; } else { strokaNoLetter = strokaNoLetter + stroka[i].ToString(); }

    //strokaNoLetter = 4501;



    Фоновое изображение


    а, если это большой файл, строчки разные ?
    11 апреля 2019 г. 19:34

  • Нужно вычленить строку и записать её без букв или вообще стереть.

    Признаком того, что последовательность символов является новой строкой, является наличие символов переноса \r и \n коды 13 и 10 в начале новой и в конце старой строки.

    string fileTXT =   File.ReadAllText(path) ="1 row\r\n 2 row";
     string stroka = "q45fg  jj01"; // из источника данных
            string strokaNoLetter = "" ; //строка без букв
        // дописать код вычленяющий новую строку
    // следующий код убирает a-z
            for (int i = 0; i < stroka.Length; i++)
    
                if (stroka[i] > 96 && stroka[i] < 123 ) 
                {
                    // буквы a - z для A-Z и для кириллицы свои коды
                    continue;
                }
                else
                { 
                    strokaNoLetter = strokaNoLetter + stroka[i].ToString();
                }
    
    //strokaNoLetter = 4501;
    
    // дописать код собирающий файл с измененными или без удаленных строк.


    Фоновое изображение


    • Изменено Yuri Evseenkov 12 апреля 2019 г. 6:23
    • Помечено в качестве ответа georgushek 13 апреля 2019 г. 6:06
    12 апреля 2019 г. 6:10

  • Нужно вычленить строку и записать её без букв или вообще стереть.

    Признаком того, что последовательность символов является новой строкой, является наличие символов переноса \r и \n коды 13 и 10 в начале новой и в конце старой строки.

    string fileTXT =   File.ReadAllText(path) ="1 row\r\n 2 row";
     string stroka = "q45fg  jj01"; // из источника данных
            string strokaNoLetter = "" ; //строка без букв
        // дописать код вычленяющий новую строку
    // следующий код убирает a-z
            for (int i = 0; i < stroka.Length; i++)
    
                if (stroka[i] > 96 && stroka[i] < 123 ) 
                {
                    // буквы a - z для A-Z и для кириллицы свои коды
                    continue;
                }
                else
                { 
                    strokaNoLetter = strokaNoLetter + stroka[i].ToString();
                }
    
    //strokaNoLetter = 4501;
    
    // дописать код собирающий файл с измененными или без удаленных строк.


    Фоновое изображение


    Почему 96 и 123?
    12 апреля 2019 г. 16:20
  •  Это десятичная  кодировка  букв от a(97) до z(122).  У больших букв другой диапазон. Русские буквы см. таблицы Юникода.

    Если стоит задача получить только цифры, то можно оставлять только их, ещё пробел(32) и перенос строки. А остальное удалять. 


    Фоновое изображение

    12 апреля 2019 г. 18:54
  •  Это десятичная  кодировка  букв от a(97) до z(122).  У больших букв другой диапазон. Русские буквы см. таблицы Юникода.

    Если стоит задача получить только цифры, то можно оставлять только их, ещё пробел(32) и перенос строки. А остальное удалять. 


    Фоновое изображение

    Спасибо большое, дали полезную информацию, я подумаю.
    13 апреля 2019 г. 6:07