Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
igorlab
23 / 7 / 1
Регистрация: 12.11.2011
Сообщений: 38
1

Исключение строки в массиве В если эта же строка встречается в массиве А

21.11.2011, 19:24. Просмотров 584. Ответов 1
Метки нет (Все метки)

Привет!

Помогите, пожалуйста, решить проблему:
1) есть два файла содержащие в строках через табуляцию:
COC=1C=CC(=CC1OC)C(CN)N(CC=2C=CC=CC2)C(C)(C)CEN400-00014159106270
CCC(C)(CN)N(CC=1C=CC=CC1)C(C)(C)CEN400-00015159106271
CCCC(CN)(CCC)N(CC=1C=CC=CC1)C(C)(C)CEN400-00017159106273
CC(C)(C)N(CC=1C=CC=CC1)C(C)(CN)CCC=2C=CC=CC2EN400-00018159106274
COC=1C=CC(=C(OC)C1)C(C)(CN)N(CC=2C=CC=CC2)C(C)(C)CEN400-00021159106277

и файл:
COC=1C=CC(=CC1OC)C(CN)N(CC=2C=CC=CC2)C(C)(C)CEN400-00014159106270
CCC(C)(CN)N(CC=1C=CC=CC1)C(C)(C)CEN400-00015159106271
CCCCC(C)(CN)N(CC=1C=CC=CC1)C(C)(C)CEN400-00016159106272
CCCC(CN)(CCC)N(CC=1C=CC=CC1)C(C)(C)CEN400-00017159106273
CC(C)(C)N(CC=1C=CC=CC1)C(C)(CN)CCC=2C=CC=CC2EN400-00018159106274
CC(C)(C)N(CC=1C=CC=CC1)C(C)(CN)C=2C=CC=CC2EN300-00019159106275
CC=1C=CC(=CC1)C(C)(CN)N(CC=2C=CC=CC2)C(C)(C)CEN300-00020159106276
COC=1C=CC(=C(OC)C1)C(C)(CN)N(CC=2C=CC=CC2)C(C)(C)CEN400-00021159106277

второй файл представляет первый, в который добавлены строки (в данном случае - 3, 6 и 7 выделены красным)

необходимо найти разницу между файлами - получить документ содержащий то что есть во втором файле и нет в первом:
CCCCC(C)(CN)N(CC=1C=CC=CC1)C(C)(C)CEN400-00016159106272
CC(C)(C)N(CC=1C=CC=CC1)C(C)(CN)C=2C=CC=CC2EN300-00019159106275
CC=1C=CC(=CC1)C(C)(CN)N(CC=2C=CC=CC2)C(C)(C)CEN300-00020159106276

необходимо иметь возможность сравнивать документы по всем трем столбцам SMILE (то что в 1-м столбце), EN-code (2-й), и ID (3-й)

как дойти до сравнивая по всем трем полям пока не представляю для гипотетического случая - если столбец только один сделал следующее:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Imports System.IO
Imports System.Text.RegularExpressions
 
Public Class Form1
    Dim needEN() As String
   
    Private Sub Run_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Run.Click
 
        OpenFileDialog1.ShowDialog()
        Dim lastEN() As String = IO.File.ReadAllLines(OpenFileDialog1.FileName, System.Text.Encoding.Default)  ' открывает старый документ 
 
        OpenFileDialog2.ShowDialog()
        Dim newEN() As String = IO.File.ReadAllLines(OpenFileDialog2.FileName, System.Text.Encoding.Default) ' открывает документ с новыми строками
 
        For x = 0 To lastEN.Length - 1 ' перебор старых EN 
 
            Dim pattern = lastEN(x)        ' подстановка EN из старого документа в качестве того что надо искать в новом с пом рег выражений
            
            Dim regexp As Regex = New Regex(pattern)
            
                For i = 0 To newEN.Length - 1 
                If regexp.IsMatch(newEN(i)) Then     ' поиск старых EN в новых
                    Dim dell As Integer = 1 + dell
                    Dim count As String = newEN(i)
                    newEN(i) = newEN(i).Replace(count, " ")   'замена содержимого строки на пробел (как просто удалять строку не "придумал")
                End If
            Next
        Next
        IO.File.WriteAllLines("c:\1.txt", newEN) ' запись результатов в файл
    End Sub
End Class
оно то как бы работает - в файле c:\1.txt остаются только новые строки, а на месте старых (те что совпали) пустые строки с одним моим "пробельчиком"...

как бы это реализовать так чтобы работало не через зад
Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 19:24
Ответы с готовыми решениями:

Сколько раз эта переменная встречается в массиве, (колличнство повт. мин.)
Прграмма 10 класса: Program minimum; const n=8; var a:array of real; min:real;...

Выполнение условия если в массиве встречается 1 или 2 фрагмент текста
Здравствуйте! помогите пожалуйста с формулой, необходимо чтобы в С1 выполнялось условие "+" или...

Проверить есть ли в массиве A [n] числа B и C и определить какое из чисел встречается в массиве чаще
проверить есть ли в массиве A числа B и C и определить какое из чисел встречается в массиве чаще

Проверить, есть ли в массиве А [n] числа В и С и определить, какое из чисел встречается в массиве чаще
1. Проверить, есть ли в массиве А числа В и С и определить, какое из чисел встречается в массиве...

Проверить, есть ли в массиве A[n] числа B и C и определить, какое из чисел встречается в массиве чаще
Проверить, есть ли в массиве A числа B и C и определить, какое из чисел встречается в массиве чаще

1
igorlab
23 / 7 / 1
Регистрация: 12.11.2011
Сообщений: 38
23.11.2011, 19:15  [ТС] 2
несколько мучительных заходов и получилось что-то такое:

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Imports System.IO
Imports System.Text.RegularExpressions
 
Public Class Form1
    Dim newEN(), lastEN() As String
  
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If OpenFileDialog2.ShowDialog() = DialogResult.OK Then
            newEN = IO.File.ReadAllLines(OpenFileDialog2.FileName, System.Text.Encoding.Default)
            Label1.Text = OpenFileDialog2.FileName
            table()
        End If
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            lastEN = IO.File.ReadAllLines(OpenFileDialog1.FileName, System.Text.Encoding.Default)
            Label2.Text = OpenFileDialog1.FileName
        End If
    End Sub
 
    Private Sub Run_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Run.Click
 
      '  If OpenFileDialog1.FileName > "" Then '"" & OpenFileDialog2.FileName >
 
            Dim fc As String
            Dim N As Integer = 1
 
            Dim dif(newEN.Length - lastEN.Length) As String ' объем масива равен разности нового и старого масива
            Dim testCheck As Boolean
 
            For x = 0 To newEN.Length - 1 'перебор строки из нового файла EN
                Dim str() As String = newEN(x).Split(vbTab)  'разделение строки на подстроки и запись их в масив str(i)
                ' на всяк случ количество столбцов
                fc = 0
 
                For i = 0 To lastEN.Length - 1 'сравнение  строк новго файла со строками старого
                    testCheck = lastEN(i) Like "*" + str(N) + "*" 'поиск в строке lastEN(i) содержимого ячейки str(N) N - можно выбирать - позволяет перебирать столбец по которому будет идти сравнение
                    If testCheck = True Then
                        Exit For 'если строки хоть раз совпали выполнение дальнейшей проверки на совпадение прекращается - перехдит к след строке нового файла (экономит время)
                    ElseIf testCheck = False Then
                        fc = fc + 1 'если ни одного совпадения не найдено и fc = lastEN.Length то эта строка новая
                    End If
                Next
 
                If fc = lastEN.Length Then
                    Dim newcount As Integer = newcount + 1 'новый нумератор для масива несовпадающих строк dif()
                    dif(newcount - 1) = newEN(x)
                End If
 
            Next
 
            IO.File.WriteAllLines("c:\dif.txt", dif)
 
        'Else
         '   MsgBox("Не выбраны исходные файлы!")
        End If
        MsgBox("Отфильтровано!")
 
    End Sub
 
    Sub table()
        Dim str1() As String = newEN(2).Split(vbTab)  'разделение строки на подстроки и запись их в масив str(i)
        Dim ntab1 = UBound(str1)
        DataGridView1.RowCount = 1
        DataGridView1.DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter
        For z = 0 To ntab1
            'DataGridView1.ce
            DataGridView1.Rows(0).Cells(z).Value = str1(z)
        Next
    End Sub
 
 
End Class
пока "рабочий" вариант для отладки - теперь интерфейс и все остальное доделывать буду.

Добавлено через 4 часа 18 минут
как то мегамедленно оно 110 000 строк перебирает....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 19:15

Если число А встречается в массиве, найти количество элементов до числа А и после него
1.Дан одномерный массив из n чисел. Если число А встречается в массиве, найти количество элементов...

Если в массиве максимальный элемент встречается несколько раз, вывести нужно минимальный индекс
Всем привет. Есть задание найти индекс максимального элемента в массиве. И еще несколько условий:...

Дан массив целых чисел. Определить все уникальные числа в массиве и сколько раз каждое из них встречается в массиве.
Написать программу для решения следующей задачи. Дан массив целых чисел. Определить все уникальные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru