powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный oracle/imp filter
6 сообщений из 31, страница 2 из 2
Тяпничный oracle/imp filter
    #39221131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, спасибо. Щас под рукой снова нет компиллятора.
Вобщем как только так сразу.
...
Рейтинг: 0 / 0
Тяпничный oracle/imp filter
    #39221132
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All

Еще дополнение к ТЗ.

Опцию SEGMENT CREATION IMMEDIATE опционально нужно заменять на SEGMENT CREATION DEFERRED.
...
Рейтинг: 0 / 0
Тяпничный oracle/imp filter
    #39221168
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил замену.
Исходник
Код: plaintext
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.
75.
76.
77.
78.
79.
80.
81.
82.
83.
#include <iostream>
#include <fstream>
#include <string>
#include <set>

using namespace std;

// разбор строки лога
void prepare_line(string& s) {
	if (s[0] != ' ' || s[1] != '"' || s[s.length() - 1] != '"') {
		s.clear();
	} else {
		s = s.substr(2, s.length() - 3);
	}
}

// Первое слово
string first_word(string s) {
	size_t pos = s.find(' ', 0);
	if(pos == string::npos) {
		return s;
	} else {
		return s.substr(0, pos);
	}
}

// Замена подстроки
void replace_substring(string& s, string substr, string value) {
	size_t pos = s.find(substr, 0);
	if (pos == string::npos) return;
	s = s.substr(0, pos) + value + s.substr(pos + substr.length(), s.length());
}

// Запись строки результата
void store_row(ofstream& out, string& row) {
	if (row.empty()) return;
	// сюда можно добавить вывод с форматированием и вырезание лишнего
	replace_substring(row, "SEGMENT CREATION IMMEDIATE", "SEGMENT CREATION DEFERRED");
	out << row << endl;
	row.clear();
}

// Разбор лога
void parse_log(string file, string file_out) {
	ifstream in(file);
	// поиск макс. длины строки
	size_t max = 0, cnt = 0; // макс. ширина и кол-во повторов
	string s;
	while (getline(in, s) && cnt < 10) {
		prepare_line(s);
		if(s.length() > max) {
			max = s.length();
			cnt = 0;
		} else if (max == s.length()) {
			cnt++;
		}
	}
	// Разбор
	in.seekg(0);
	ofstream out(file_out);
	string row;
	set<string> keywords = {"CREATE", "ALTER", "DROP", "COMMENT"}; // Ключевые слова начала строки
	while (getline(in, s)) {
		prepare_line(s);
		if(keywords.find(first_word(s)) != keywords.end()) {
			store_row(out, row);
		}
		row += s;
		if(s.length() != max) {
			//if (keywords.find(first_word(row)) == keywords.end() && !first_word(row).empty()) cout << "New keyword: " << first_word(row) << endl;
			store_row(out, row);
		}
	}
	store_row(out, row);
	out.close();
}

int main()
{
	parse_log("input.txt", "output.txt");

	return 0;
}

...
Рейтинг: 0 / 0
Тяпничный oracle/imp filter
    #39221255
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ну ты метеор!

А насколько этот реплейсмент толерантный к пробелам и переводам строк?

Код: plaintext
1.
replace_substring(row, "SEGMENT CREATION IMMEDIATE", "SEGMENT CREATION DEFERRED");



P.S. Я еще твой сорс не смотрел если что.
...
Рейтинг: 0 / 0
Тяпничный oracle/imp filter
    #39221277
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там нет переводов строк. row - это полная строка скрипта считанная из лога. Несколько пробелов подряд не найдет. Но можно добавить удаление лишних пробелов, туда же в store_row()

Я структуру кода сделал так чтобы добавлять было удобно, а что добавлять - ХЗ. Все на свете заранее не предусмотришь. Ты прогони реальные данные, и показывай куски того что неправильно обработалось.
...
Рейтинг: 0 / 0
Тяпничный oracle/imp filter
    #39221294
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ок. Щас немного занят.
Ближе к выходным - займусь.

P.S. Совокупляю Oracle и SQLIte :)
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничный oracle/imp filter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]