Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202

Поиск повторяющихся символов в тексте и удаление таких строк

06.10.2015, 14:16. Показов 4227. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужен готовый .exe.
Есть .txt файлы, в нем нужно по удалять строчки - где какой либо символ повторяется больше 2, 3 раз и т.д.
пример: нужно удалить вот такие строчки (в данном случае символ "1") - qw1t1, i1pk1O1, 1Pa01, 1GV1bn1nbg1.

были предложены код на основе Perl:
perl -pe "my %h; undef $_ if grep{ $h{$_} >= 4 }map{ $h{$_}++;$_ }split//" 00.txt > 01.txt = чистит один файл
for %j in ( *.txt ) do @perl -i.old -pe "my %h; undef $_ if grep{ $h{$_} >= 4 }map{ $h{$_}++;$_ }split//" %j = чистит папку
но один файл 1Гб чистится около суток. (файлы весят 1 - 20Гб).

bat:
Кликните здесь для просмотра всего текста
@set infile=000.txt
@set outfile=111.txt
@set count=4
@echo off
setlocal ENABLEDELAYEDEXPANSION
echo.>.tmp
>nul copy /y %infile% %outfile%
for /f "tokens=* delims=" %%a in (%outfile%) do (
set "line=%%a"
call arsLine)
del /q "!outfile!.tmp" .tmp
exit /b
arsLine
set "reg="
set "char=!line:~0,1!"
>nul findstr "!char!" .tmp && exit /b || (
echo.!char!>>.tmp
for /l %%i in (1,1,!count!) do set reg=!reg!.*!char!
findstr /v /r "!reg!" !outfile! >!outfile!.tmp
>nul copy /y !outfile!.tmp !outfile!)
set "line=!line:~1!"
if defined line goto parsLine
exit /b
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.10.2015, 14:16
Ответы с готовыми решениями:

Удаление повторяющихся символов
Задача банальна. Удалить повторяющиеся символы в строке. В интернете шарил, предложенные варианты слишком сложные и непонятные. Язык си,...

Удаление повторяющихся символов
Есть строка символов, я её обрабатываю, удаляю слово с повторяющимися символами,дело в том что заодно удаляются и цифровые слова, 55 44 33...

Удаление повторяющихся символов
из последовательности символов удалить самую большую из одинаковых элементов допустим есть строка aabbbbzcc, на выходе aazcc ...

23
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
12.10.2015, 14:15  [ТС]
Студворк — интернет-сервис помощи студентам
nmcf, скомпилировал. раб. норм - спс.

Добавлено через 1 минуту
Цитата Сообщение от S_el Посмотреть сообщение
компилируй с консоли,командой cl.
командой cl - ?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.10.2015, 16:09
Цитата Сообщение от S_el Посмотреть сообщение
компилируй с консоли
И предварительно изучи все ключи, всю прочую хрень. Проще проект создать.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
12.10.2015, 16:19
Цитата Сообщение от nmcf Посмотреть сообщение
И предварительно изучи все ключи, всю прочую хрень. Проще проект создать.
Зачем изучать все ключи и всю прочую хрень? Для начинающих эти ключи вообще не нужны.

Цитата Сообщение от Cyber_F Посмотреть сообщение
командой cl - ?
именно.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.10.2015, 17:27
Вот пример. Если ошибку показывает, значит пароль не подошёл. Допиливай.
C++
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
#include <iostream>
#include <algorithm>
#include <cstdlib>
 
#include "Windows.h"
#include "unrar.h"
 
#pragma comment (lib, "unrar.lib")
 
wchar_t passw[] = L"12345";
 
int CALLBACK cbp(UINT msg, LPARAM UserData, LPARAM P1, LPARAM P2)
{
    switch (msg)
    {
    case UCM_NEEDPASSWORDW:
        wcscpy((wchar_t *)P1, passw);
        return 1;
        break;
    case UCM_PROCESSDATA:
        return 1;
        break;
    default:
        return 0;
    }
}
 
int main()
{
    RAROpenArchiveDataEx ad;
    RARHeaderDataEx hd;
    ad.ArcName = NULL;
    ad.ArcNameW = L"data.rar";
    ad.OpenMode = RAR_OM_EXTRACT;
    ad.CmtBuf = NULL;
    ad.CmtBufSize = 0;
    ad.Callback = cbp;
    std::fill(ad.Reserved, ad.Reserved + 28, 0);
 
    HANDLE h = RAROpenArchiveEx(&ad);
    if (h == NULL)
    {
        std::wcout << "Open error.\n";
        return 1;
    }
 
    hd.CmtBuf = NULL;
    hd.CmtBufSize = 0;
    hd.CmtSize = 0;
    hd.CmtState = 0;
    hd.RedirName = NULL;
    hd.RedirNameSize = 0;
    std::fill(hd.Reserved, hd.Reserved + 994, 0);
 
    int r;
 
    if ((r = RARReadHeaderEx(h, &hd)) != 0)
        std::wcout << "Read error.: " << r << std::endl;
    else
        if ((r = RARProcessFileW(h, RAR_TEST, NULL, NULL)) != 0) std::wcout << "Test error.: " << r << std::endl;
 
    RARCloseArchive(h);
 
    system("pause");
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2015, 17:27
Помогаю со студенческими работами здесь

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

Удаление повторяющихся символов в предложении
Фраза может быть любая. Консолька на vs подойдет.Например фраза на русском&quot;Я отлично копирую текст&quot;. После удаления повторов...

Удаление повторяющихся символов строки
Здравствуйте,встретился с такой задачей: Создать динамический массив(размер можно вести с клавиатуры),ввести символы. Программа должна...

Удаление из строки повторяющихся символов
Например Ввод: ABBGBAZ Вывод: ABGZ

Удаление повторяющихся символов из строки
Необходимо написать функцию delete_repeats, которая удаляет все повторяюшиеся символы из строки. например: Only three more lessons...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru