Member 13307200 Ответов: 2

Мне нужна обработка строк...


У меня есть веревка...
----------56628885466----655277772323777---
Я хочу обработать эту строку..
1.я хочу, чтобы строка, чтобы разделить, как
56628885466
655277772323777
2. Найдите наибольшее значение в каждой строке, т. е. 8 n 7
3.я хочу заменить другое, чем самое высокое нет, на "-"
строка будет выглядеть так
--------------888------------7777----777---
4. Я хочу найти среднее значение из строки, Лос/2 и снова заменить его "-"
--------------8---------------7------7----
5. Затем я хочу знать индекс массива значения со значением

Что я уже пробовал:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim s As String = IO.File.ReadAllText("C:\Users\mks\Desktop\Newfolder\test.sp1")
        Dim r As String = Regex.Replace(s.ToString, "----", "-")
        Dim p As String = Regex.Replace(r.ToString, "--", "-")
        Dim t As String = Regex.Replace(p.ToString, "--", "-")
        Dim elements() As String = Regex.Split(t, "-")

        For Each element In elements


        Next
        Dim rp As String
        rp = elements(0)
        Console.WriteLine(rp)


    End Sub

2 Ответов

Рейтинг:
18

Karthik_Mahalingam

написанный на c#, получите логику и сделайте то же самое в vb, вы можете найти много онлайн-конвертеров кода для преобразования c# в vb

using System;
using System.Linq;

namespace CP
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "----------56628885466----655277772323777---"; 
            string[] parts = input.Split(new char[] { '-' }, StringSplitOptions.None);
            string final = "";
            foreach (string part in parts)
            {
                if (part == "")
                    final += "-";
                else
                {
                    var max = part.Max();
                    string temp = part;
                    foreach (char c in part)
                    {
                        if (c != max)
                            temp = temp.Replace(c, '-');
                    }

                    string temp1 = "";
                    foreach (string item in temp.Split('-'))
                    {
                        if (item == "")
                            temp1 += item;
                        else
                            temp1 += GetMiddle(item);

                    }
                    final += temp1;
                }
            }
            Console.WriteLine(final); //"-----------8------7--7----"

        }

        private static string GetMiddle(  string item)
        {
           var a =  item.Length / 2;
           string temp = "";
           for (int i = 0; i < item.Length; i++)
           {
               if (i == a)
                   temp += item[0];
               else
                   temp += "-";
           }
           return temp;
        }
       


    }
}


Member 13307200

Большое вам спасибо, сэр..
Я проверю ...
на данный момент сейчас
я получаю..
----------------------7----
как выход

Karthik_Mahalingam

хорошо, но тот же код с входом iam получает вывод как
-----------8------7--7----

Member 13307200

Сэр, в C# он работает нормально..
Я делаю это в vb...
Я проверю и сообщу, сэр...
Большое спасибо!...

Member 13307200

Сэр плз проверьте с vb. net..его не видно..

Karthik_Mahalingam

сэр, я не очень хорошо разбираюсь в vb.

Member 13307200

Приставка.WriteLine(ввод);
Приставка.WriteLine (final); //"-----------8------7--7----"

Member 13307200

мне нужно построить график по этому поводу...
график будет давать только пиковые значения

Karthik_Mahalingam

ладно. вы сделаете все что угодно

Member 13307200

еще одна проблема отсутствие строк меньше
по сравнению с входной строкой

Member 13307200

Картик выход га меньше символов для ввода сравнить
----------56628885466----655277772323777---
----------------7----

Karthik_Mahalingam

поставьте точку останова, отладьте и проверьте, где отсутствует символ.
его простая вещь, чтобы проверить.

Maciej Los

5ед!

Karthik_Mahalingam

Спасибо Мацей
Давно не виделись

Maciej Los

Я был очень занят, Картик.
Овации,
Мацей

Karthik_Mahalingam

хм, прекрасно береги себя Мацей

Рейтинг:
12

Ralf Meier

Здесь вы найдете решение из Karthik преобразованное в VB :

Imports System
Imports System.Linq

Namespace CP
	Class Program
		Private Shared Sub Main(args As String())
			Dim input As String = "----------56628885466----655277772323777---"
			Dim parts As String() = input.Split(New Char() {"-"C}, StringSplitOptions.None)
			Dim final As String = ""
			For Each part As String In parts
				If part = "" Then
					final += "-"
				Else
					Dim max = part.Max()
					Dim temp As String = part
					For Each c As Char In part
						If c <> max Then
							temp = temp.Replace(c, "-"C)
						End If
					Next

					Dim temp1 As String = ""
					For Each item As String In temp.Split("-"C)
						If item = "" Then
							temp1 += item
						Else
							temp1 += GetMiddle(item)

						End If
					Next
					final += temp1
				End If
			Next
			Console.WriteLine(final)
			'"-----------8------7--7----"
		End Sub

		Private Shared Function GetMiddle(item As String) As String
			Dim a = item.Length / 2
			Dim temp As String = ""
			For i As Integer = 0 To item.Length - 1
				If i = a Then
					temp += item(0)
				Else
					temp += "-"
				End If
			Next
			Return temp
		End Function



	End Class
End Namespace


Maciej Los

5 за старание!

Ralf Meier

Спасибо Мацей :)

Member 13307200

Ральф это хорошо работает в vb.net

Ralf Meier

Не благодари меня - решение исходит от Картика ...
Но мне повезло, если я смогу вам помочь ... :)