powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг (?) текстового лога и укладка в базу Oracle
10 сообщений из 10, страница 1 из 1
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053416
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Подскажите как бы вы положили перечисленные ниже данные представленные в виде текстового файла в базу данных (oracle, таблица
create table mayasscheme.test_
(
key1 number,
Key2 number,
Level_ VARCHAR2(30 CHAR),
Node_Name VARCHAR2(30 CHAR),
Open_Date Date,
Last_Active Date,
Closed_Date Date
);
):

Код: 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.
[DET ] Key is 123
[DET ] Key is 123
[DET ] Level is 02
[DET ] Node Name is CU     
[DEB  ] Open Date      -  23.11.2012
[DEB  ] Last Active Date -  22.11.2012
[DEB  ] Closed Date      -  21.11.2012
 
[DET ] Key is 124
[DET ] Key is 124
[DET ] Level is 01
[DET ] Node Name is CA     
[DEB  ] Open Date        - 21.11.2012
[DEB  ] Last Active Date - 20.11.2012
[DEB  ] Closed Date      - 22.11.2012
 
 
[DET ] Key is 125
[DET ] Key is 125
[DET ] Level is 02
[DET ] Node Name is CU     
[DEB  ] Open Date      -  23.11.2012
[DEB  ] Last Active Date -  22.11.2012
[DEB  ] Closed Date      -  21.11.2012
 
И т.д.

Немного почитала про парсеры, класс scanner, регулярные выражения, но хотелось бы услышать мнение профессионалов (если можно с примерами =)) ) как бы вы делали такой парсинг и укладку в базу. Спасибо.
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053445
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Укладка лога в базу это очень странная постановка. Обычно так не делают.
Если события проходят через механизм lo4j или logback то там уже есть аппендеры
которые могут писать эти события в БД. И даже если нет то нужно фиксировать
эти события в БД сразу.

В вашем случае парсер не нужен. Парсеры это тяжёлая артиллерия которую
нацеливают на исходники ЯП и прочее. Если задачу можно решить поиском
подстрок в строке - то обычно так и делают. В вашем случае если тектовый
файл имеет интерфейс чтения строк .readLine то можно искать вхождение
подстроки [DET ] Key и от нее считать поля по порядку номеров.
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053476
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
May12,

формат фиксированный, поэтому в цикле считать строки и символы в переменные
Потом записать в БД через JDBC

аналог fscanf в Java
http://zavelos.ru/forum/60059-analog-fscanf-v-Java

Но аффтару нужен готовый пример )))
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053528
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
не я могу и попробовать с нуля. правда придется поковыряться. С примером было бы легче, ну т.е. халявней. =)
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053547
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
May12,
полпримера

Код: java
1.
2.
3.
4.
5.
6.
7.
String sql = "INSERT INTO sal_audit VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, empID);
pstmt.setFloat(2, oldSal);
pstmt.setFloat(3, newSal);
pstmt.executeUpdate();
pstmt.close();
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053656
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, спасибо.

Это, как я поняла, укладка в базу.
Мне же не совсем понятен механизм присвоение значений переменным. Вот я пока то, что нарисовала:

Код: java
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.
public static void main(String[] args) throws IOException
	
	{
		
		 FileInputStream logfilestream = new FileInputStream("D://Docs//LOGUPLOAD//testlog.txt");
		 DataInputStream in = new DataInputStream(logfilestream);
	     BufferedReader br = new BufferedReader(new InputStreamReader(in));
	     String strLine = br.readLine();
	     int StrNum = 0;
	     	
	     while ((strLine = br.readLine()) != null) 	
			{
 
	    	 int ContainRegex = strLine.indexOf("[DET ] Key is") ;
	    	 //System.out.println (StrNum + "	" + strLine.indexOf("[DET ] Key is"));
	    	 
	    	 if (ContainRegex == 0)
	    	 {   
	    	 System.out.println (StrNum + "	" + strLine ); // пока выведу в консоль до прихода осознания
	    	 }
	    	 else
	    	 {}
	    	 	    StrNum++;
			}
			//Close the input stream
			in.close();
		 
	}
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053852
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня прогрессирует, правда не понятно что = ). В общем вложила еще один цикл:

Код: java
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.
public static void main(String[] args) throws IOException
	
	{
	  FileInputStream logfilestream = new FileInputStream("D://Docs//PRBLOGUPLOAD//testlog.txt");
	  DataInputStream in = new DataInputStream(logfilestream);
	   BufferedReader br = new BufferedReader(new InputStreamReader(in));
	   String strLine = br.readLine();
	   int StrNum = 0;
while ((strLine = br.readLine()) != null) 	
			{
	    	 int ContainRegex = strLine.indexOf("[DET ] Key is") ;
	    	 if (ContainRegex == 0)
	    	 {   
	    	 System.out.println (StrNum + "	" + strLine );
	                   while ((strLine = br.readLine()) != null) 	
					   {ContainRegex = strLine.indexOf("[DET ] Level") ;
							if (ContainRegex == 0)
						    	 {   
							    	 System.out.println (StrNum + "	" + strLine );
									break;
								  }
									  else
												    	 {
											    	    	  
												    	 }
												    	 	   
				}
	    	    	 }
	    	 else
	    	 {
	    	 }
	    	 	    StrNum++;
			}
			in.close();
	}



Результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
0	[DET ] Key is 123
0	[DET ] Level is 02
6	[DET ] Key is 124
6	[DET ] Level is 01
13	[DET ] Key is 125
13	[DET ] Level is 02

Т.е. получилось вывести парами. Что думаете? Это вариант или полная глупость?
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38053898
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще один опус на сон грядущий:
Код: java
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.
	public static void main(String[] args) throws IOException
	{
	
	    int StrNum = 0;
		String String1 = FindSubstr ("[DET ] Key is"); 
		System.out.println(StrNum + "    " + String1);
		String String2 = FindSubstr ("[DET ] Level is"); 
		System.out.println(StrNum + "    " + String2);
 	
	}
	public static String FindSubstr (String Substring) throws IOException
	{
	 FileInputStream logfilestream = new FileInputStream("D://Docs//PRBLOGUPLOAD//testlog.txt");
	 DataInputStream in = new DataInputStream(logfilestream);
	     BufferedReader br = new BufferedReader(new InputStreamReader(in));
	     String strLine = br.readLine();
	     String StringValue = null;   
	     while ((strLine = br.readLine()) != null) 	
			{

	    	 int ContainRegex = strLine.indexOf(Substring) ;
	    	 if (ContainRegex == 0)
	    	 {   
	    	 StringValue = strLine;
	    
	    	 }
	    	 else
	    	 { 	 }
	    	
			}
			in.close();
			return StringValue;
     	
	}
}



Было желание... отправлять в отдельный метод подстроку FindSubstr, чтобы он возвращал строки (ну а потом и значения) в которых содержаться подстроки. Но обломилось, т.к. не получилось вернуть значение из тела цикла. Грубо говоря, запись типа:

Код: java
1.
2.
3.
4.
5.
 if (ContainRegex == 0)
	    	 {   
	    	 StringValue = strLine;
	        return StringValue;
	    	 }



не возможна.

Need help.
...
Рейтинг: 0 / 0
Парсинг (?) текстового лога и укладка в базу Oracle
    #38055160
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123May12,

формат фиксированный, поэтому в цикле считать строки и символы в переменные
Потом записать в БД через JDBC

аналог fscanf в Java
http://zavelos.ru/forum/60059-analog-fscanf-v-Java

Но аффтару нужен готовый пример )))

На больших логах время работы парсера может сильно удивить.
В цикле анализируем файл и создаем csv(допустим) для вставки в базу. Так будет , скорее всего, быстрее.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Парсинг (?) текстового лога и укладка в базу Oracle
    #39908843
goliaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class  Ideone{
    public static void main (String[] args)  throws Exception {
    byte[] entireFileData;
    ByteBuffer wrapped;
    ByteBuffer wrapped1;
    ByteBuffer wrapped2;
       
	    File in               = new File("c://WAV//tada1.wav");	   
      
            Path path             = Paths.get("c://WAV//tada1.wav");   
	    
	    entireFileData        = Files.readAllBytes(path);
	    String bigStr         = new String(entireFileData);
	    String smallStrL      = "data";            
	    String smallStrU      = "DATA";
            int  i  = bigStr.indexOf(smallStrL);	    	  
	    int  i1 = bigStr.indexOf(smallStrU);     
	    System.out.println("Позиция data  = " + i);         
            System.out.println("Позиция DATA  = " + i1);
	}
}
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсинг (?) текстового лога и укладка в базу Oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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