• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

作業部屋の使い方を試しています。


Commit MetaInfo

Revision36 (tree)
Time2014-07-10 12:48:25
Authortuna_p

Log Message

(empty log message)

Change Summary

  • delete: HtmlTest2/src/test1/Frame1.java
  • delete: HtmlTest2/src/test1/Frame1.form
  • delete: HtmlTest2/src/test1/HtmlParserCallback.java
  • delete: HtmlTest2/src/test1/serachData.java
  • delete: HtmlTest2/src/test1/HtmlParser.java
  • delete: HtmlTest2/src/test1/serachDataIO.java
  • delete: HtmlTest2/src/test1

Incremental Difference

--- HtmlTest2/src/test1/serachDataIO.java (revision 35)
+++ HtmlTest2/src/test1/serachDataIO.java (nonexistent)
@@ -1,120 +0,0 @@
1-/*
2- * To change this license header, choose License Headers in Project Properties.
3- * To change this template file, choose Tools | Templates
4- * and open the template in the editor.
5- */
6-
7-package test1;
8-
9-import java.io.BufferedReader;
10-import java.io.BufferedWriter;
11-import java.io.File;
12-import java.io.FileInputStream;
13-import java.io.FileOutputStream;
14-import java.io.IOException;
15-import java.io.InputStreamReader;
16-import java.io.OutputStreamWriter;
17-import java.util.ArrayList;
18-
19-/**
20- *
21- * @author kgto
22- */
23-public class serachDataIO {
24-
25- private final String splitchar = "\t";
26-
27- private String UrlAdress;
28- private ArrayList slist;
29-
30- public void seturl(String UrlAdress) {
31- this.UrlAdress = UrlAdress;
32- }
33-
34- public void setslist(ArrayList slist) {
35- this.slist = slist;
36- }
37-
38- public String geturl() {
39- return UrlAdress;
40- }
41-
42- public ArrayList getslist() {
43- return slist;
44- }
45-
46- /**
47- * 保存
48- * @param file
49- */
50- public void save(File file) {
51-
52- try {
53- //空のファイルを作成
54- file.createNewFile();
55-
56- FileOutputStream fileoutputstream = new FileOutputStream(file);
57- OutputStreamWriter outputstreamwriter = new OutputStreamWriter(fileoutputstream, "UTF-8");
58- BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
59-
60- // URL
61- bufferedwriter.write(UrlAdress);
62- bufferedwriter.write("\n");
63- // 検索情報
64- for (Object slist1 : slist) {
65- serachData sdat = (serachData) slist1;
66- StringBuilder str = new StringBuilder();
67- str.append(sdat.getitem()).append(splitchar);
68- str.append(sdat.getHtmltag()).append(splitchar);
69- str.append(sdat.getHtmlid()).append(splitchar);
70- str.append(sdat.getHtmlclass()).append(splitchar);
71- str.append(sdat.getaround()).append(splitchar);
72- str.append(sdat.getregexp()).append("\n");
73-
74- bufferedwriter.write(str.toString());
75- }
76- bufferedwriter.close();
77-
78- } catch(IOException e) {
79- System.out.println(e);
80- }
81- }
82-
83- /**
84- * 読込
85- * @param file
86- */
87- public void load(File file) {
88- slist = new ArrayList();
89-
90- try {
91- FileInputStream fileinputstream = new FileInputStream(file);
92- InputStreamReader inputstreamreader = new InputStreamReader(fileinputstream, "UTF-8");
93- BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
94-
95- String rec;
96-
97- // URL
98- UrlAdress = bufferedreader.readLine();
99- // 検索情報
100- while((rec = bufferedreader.readLine()) != null) {
101- String[] recary = rec.split(splitchar, -1);
102- serachData sdat = new serachData();
103- sdat.setitem(recary[0]);
104- sdat.setHtmltag(recary[1]);
105- sdat.setHtmlid(recary[2]);
106- sdat.setHtmlclass(recary[3]);
107- sdat.setaround(recary[4]);
108- sdat.setregexp(recary[5]);
109-
110- slist.add(sdat);
111- }
112- bufferedreader.close();
113-
114- } catch(IOException e) {
115- System.out.println(e);
116- }
117-
118- }
119-
120-}
--- HtmlTest2/src/test1/Frame1.java (revision 35)
+++ HtmlTest2/src/test1/Frame1.java (nonexistent)
@@ -1,359 +0,0 @@
1-/*
2- * To change this license header, choose License Headers in Project Properties.
3- * To change this template file, choose Tools | Templates
4- * and open the template in the editor.
5- */
6-
7-package test1;
8-
9-import java.io.File;
10-import java.util.*;
11-import javax.swing.JFileChooser;
12-import javax.swing.filechooser.FileNameExtensionFilter;
13-import org.jdesktop.observablecollections.ObservableCollections;
14-
15-/**
16- * HTMLページ上の特定の項目を検索し、その項目内容の値を取得する。
17- * @author kgto
18- */
19-public class Frame1 extends javax.swing.JFrame {
20-
21- private ArrayList slist = new ArrayList();
22- private List serachDataList = ObservableCollections.observableList(slist);
23- private serachDataIO sio = new serachDataIO();
24-
25- /**
26- * Creates new form Frame1
27- */
28- public Frame1() {
29- initComponents();
30- }
31-
32- public List getSerachDataList() {
33- return this.serachDataList;
34- }
35-
36- public void setSerachDataList(List serachDataList) {
37- this.serachDataList = serachDataList;
38- }
39-
40- /**
41- * This method is called from within the constructor to initialize the form.
42- * WARNING: Do NOT modify this code. The content of this method is always
43- * regenerated by the Form Editor.
44- */
45- @SuppressWarnings("unchecked")
46- // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
47- private void initComponents() {
48- bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
49-
50- jFileChooser1 = new javax.swing.JFileChooser();
51- jLabel1 = new javax.swing.JLabel();
52- jTxtUrl = new javax.swing.JTextField();
53- jBtnSearch = new javax.swing.JButton();
54- jPanel1 = new javax.swing.JPanel();
55- jScrollPane1 = new javax.swing.JScrollPane();
56- jTable1 = new javax.swing.JTable();
57- jBtnRowIns = new javax.swing.JButton();
58- jBtnRowDel = new javax.swing.JButton();
59- jBtnRowCpy = new javax.swing.JButton();
60- jPanel2 = new javax.swing.JPanel();
61- jScrollPane2 = new javax.swing.JScrollPane();
62- jTxtRtn = new javax.swing.JTextArea();
63- jMenuBar1 = new javax.swing.JMenuBar();
64- jMenu1 = new javax.swing.JMenu();
65- jMenuLoad = new javax.swing.JMenuItem();
66- jMenuSave = new javax.swing.JMenuItem();
67- jMenu2 = new javax.swing.JMenu();
68-
69- jFileChooser1.setCurrentDirectory(new java.io.File("C:\\zz_work\\java"));
70- jFileChooser1.setDialogTitle("");
71- jFileChooser1.setFileFilter(new FileNameExtensionFilter("TEXTファイル", "txt"));
72-
73- setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
74- setTitle("タグ検索");
75-
76- jLabel1.setText(" URL:");
77-
78- jBtnSearch.setText("検索");
79- jBtnSearch.addActionListener(new java.awt.event.ActionListener() {
80- public void actionPerformed(java.awt.event.ActionEvent evt) {
81- jBtnSearchActionPerformed(evt);
82- }
83- });
84-
85- jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("検索情報"));
86-
87- jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
88- jTable1.getTableHeader().setReorderingAllowed(false);
89-
90- org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${serachDataList}");
91- org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, eLProperty, jTable1);
92- org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${item}"));
93- columnBinding.setColumnName("項目名");
94- columnBinding.setColumnClass(String.class);
95- columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmltag}"));
96- columnBinding.setColumnName("タグ");
97- columnBinding.setColumnClass(String.class);
98- columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmlid}"));
99- columnBinding.setColumnName("ID");
100- columnBinding.setColumnClass(String.class);
101- columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${htmlclass}"));
102- columnBinding.setColumnName("クラス");
103- columnBinding.setColumnClass(String.class);
104- columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${around}"));
105- columnBinding.setColumnName("位置");
106- columnBinding.setColumnClass(String.class);
107- columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${regexp}"));
108- columnBinding.setColumnName("抽出条件");
109- columnBinding.setColumnClass(String.class);
110- bindingGroup.addBinding(jTableBinding);
111- jTableBinding.bind();
112- jScrollPane1.setViewportView(jTable1);
113-
114- jBtnRowIns.setText("行挿入");
115- jBtnRowIns.addActionListener(new java.awt.event.ActionListener() {
116- public void actionPerformed(java.awt.event.ActionEvent evt) {
117- jBtnRowInsActionPerformed(evt);
118- }
119- });
120-
121- jBtnRowDel.setText("行削除");
122- jBtnRowDel.addActionListener(new java.awt.event.ActionListener() {
123- public void actionPerformed(java.awt.event.ActionEvent evt) {
124- jBtnRowDelActionPerformed(evt);
125- }
126- });
127-
128- jBtnRowCpy.setText("行コピー");
129- jBtnRowCpy.addActionListener(new java.awt.event.ActionListener() {
130- public void actionPerformed(java.awt.event.ActionEvent evt) {
131- jBtnRowCpyActionPerformed(evt);
132- }
133- });
134-
135- javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
136- jPanel1.setLayout(jPanel1Layout);
137- jPanel1Layout.setHorizontalGroup(
138- jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
139- .addGroup(jPanel1Layout.createSequentialGroup()
140- .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
141- .addComponent(jBtnRowCpy)
142- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
143- .addComponent(jBtnRowDel)
144- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
145- .addComponent(jBtnRowIns))
146- .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
147- );
148- jPanel1Layout.setVerticalGroup(
149- jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
150- .addGroup(jPanel1Layout.createSequentialGroup()
151- .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE)
152- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
153- .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
154- .addComponent(jBtnRowDel)
155- .addComponent(jBtnRowIns)
156- .addComponent(jBtnRowCpy)))
157- );
158-
159- jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("検索結果"));
160-
161- jTxtRtn.setColumns(20);
162- jTxtRtn.setRows(5);
163- jScrollPane2.setViewportView(jTxtRtn);
164-
165- javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
166- jPanel2.setLayout(jPanel2Layout);
167- jPanel2Layout.setHorizontalGroup(
168- jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
169- .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE)
170- );
171- jPanel2Layout.setVerticalGroup(
172- jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
173- .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)
174- );
175-
176- jMenu1.setText("ファイル");
177-
178- jMenuLoad.setText("LOAD");
179- jMenuLoad.addActionListener(new java.awt.event.ActionListener() {
180- public void actionPerformed(java.awt.event.ActionEvent evt) {
181- jMenuLoadActionPerformed(evt);
182- }
183- });
184- jMenu1.add(jMenuLoad);
185-
186- jMenuSave.setText("SAVE");
187- jMenuSave.addActionListener(new java.awt.event.ActionListener() {
188- public void actionPerformed(java.awt.event.ActionEvent evt) {
189- jMenuSaveActionPerformed(evt);
190- }
191- });
192- jMenu1.add(jMenuSave);
193-
194- jMenuBar1.add(jMenu1);
195-
196- jMenu2.setText("検索");
197- jMenu2.addMouseListener(new java.awt.event.MouseAdapter() {
198- public void mouseClicked(java.awt.event.MouseEvent evt) {
199- jMenu2MouseClicked(evt);
200- }
201- });
202- jMenuBar1.add(jMenu2);
203-
204- setJMenuBar(jMenuBar1);
205-
206- javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
207- getContentPane().setLayout(layout);
208- layout.setHorizontalGroup(
209- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
210- .addGroup(layout.createSequentialGroup()
211- .addComponent(jLabel1)
212- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
213- .addComponent(jTxtUrl)
214- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
215- .addComponent(jBtnSearch))
216- .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
217- .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
218- );
219- layout.setVerticalGroup(
220- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
221- .addGroup(layout.createSequentialGroup()
222- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
223- .addComponent(jLabel1)
224- .addComponent(jTxtUrl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
225- .addComponent(jBtnSearch))
226- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
227- .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
228- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
229- .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
230- );
231-
232- bindingGroup.bind();
233-
234- pack();
235- }// </editor-fold>//GEN-END:initComponents
236-
237- private void jBtnRowInsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowInsActionPerformed
238- int SelectedRow = jTable1.getSelectedRow();
239- serachData sdat = new serachData();
240-
241- if(SelectedRow >= 0) {
242- this.serachDataList.add(SelectedRow, sdat);
243- } else {
244- this.serachDataList.add(sdat);
245- }
246- }//GEN-LAST:event_jBtnRowInsActionPerformed
247-
248- private void jBtnRowDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowDelActionPerformed
249- int SelectedRow = jTable1.getSelectedRow();
250- if(!(SelectedRow < 0)) {
251- this.serachDataList.remove(SelectedRow);
252- }
253- }//GEN-LAST:event_jBtnRowDelActionPerformed
254-
255- private void jMenuLoadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuLoadActionPerformed
256- int selected = jFileChooser1.showOpenDialog(this);
257- if (selected == JFileChooser.APPROVE_OPTION) {
258- File file = jFileChooser1.getSelectedFile();
259- serachDataList.clear();
260- sio.load(file);
261- jTxtUrl.setText(sio.geturl());
262- serachDataList.addAll(sio.getslist());
263- }
264- }//GEN-LAST:event_jMenuLoadActionPerformed
265-
266- private void jMenuSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuSaveActionPerformed
267- int selected = jFileChooser1.showSaveDialog(this);
268- if (selected == JFileChooser.APPROVE_OPTION) {
269- File file = jFileChooser1.getSelectedFile();
270- sio.seturl(jTxtUrl.getText());
271- sio.setslist(slist);
272- sio.save(file);
273- }
274- }//GEN-LAST:event_jMenuSaveActionPerformed
275-
276- private void jMenu2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenu2MouseClicked
277- jTxtRtn.setText(null);
278- HtmlParser par = new HtmlParser(jTxtUrl.getText());
279- for (Object slist1 : slist) {
280- String rtn = par.search((serachData)slist1);
281- jTxtRtn.append(rtn + "\r\n");
282- }
283- }//GEN-LAST:event_jMenu2MouseClicked
284-
285- private void jBtnRowCpyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnRowCpyActionPerformed
286- int SelectedRow = jTable1.getSelectedRow();
287- if(SelectedRow >= 0) {
288- serachData SelectData = (serachData)slist.get(SelectedRow);
289- serachData Cpydata = new serachData(SelectData);
290- this.serachDataList.add(SelectedRow, Cpydata);
291- }
292- }//GEN-LAST:event_jBtnRowCpyActionPerformed
293-
294- private void jBtnSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtnSearchActionPerformed
295- jTxtRtn.setText(null);
296- HtmlParser par = new HtmlParser(jTxtUrl.getText());
297- for (Object slist1 : slist) {
298- String rtn = par.search((serachData)slist1);
299- jTxtRtn.append(rtn + "\r\n");
300- }
301- }//GEN-LAST:event_jBtnSearchActionPerformed
302-
303- /**
304- * @param args the command line arguments
305- */
306- public static void main(String args[]) {
307- /* Set the Nimbus look and feel */
308- //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
309- /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
310- * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
311- */
312- try {
313- for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
314- if ("Nimbus".equals(info.getName())) {
315- javax.swing.UIManager.setLookAndFeel(info.getClassName());
316- break;
317- }
318- }
319- } catch (ClassNotFoundException ex) {
320- java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
321- } catch (InstantiationException ex) {
322- java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
323- } catch (IllegalAccessException ex) {
324- java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
325- } catch (javax.swing.UnsupportedLookAndFeelException ex) {
326- java.util.logging.Logger.getLogger(Frame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
327- }
328- //</editor-fold>
329-
330- /* Create and display the form */
331- java.awt.EventQueue.invokeLater(new Runnable() {
332- public void run() {
333- new Frame1().setVisible(true);
334- }
335- });
336- }
337-
338- // Variables declaration - do not modify//GEN-BEGIN:variables
339- private javax.swing.JButton jBtnRowCpy;
340- private javax.swing.JButton jBtnRowDel;
341- private javax.swing.JButton jBtnRowIns;
342- private javax.swing.JButton jBtnSearch;
343- private javax.swing.JFileChooser jFileChooser1;
344- private javax.swing.JLabel jLabel1;
345- private javax.swing.JMenu jMenu1;
346- private javax.swing.JMenu jMenu2;
347- private javax.swing.JMenuBar jMenuBar1;
348- private javax.swing.JMenuItem jMenuLoad;
349- private javax.swing.JMenuItem jMenuSave;
350- private javax.swing.JPanel jPanel1;
351- private javax.swing.JPanel jPanel2;
352- private javax.swing.JScrollPane jScrollPane1;
353- private javax.swing.JScrollPane jScrollPane2;
354- private javax.swing.JTable jTable1;
355- private javax.swing.JTextArea jTxtRtn;
356- private javax.swing.JTextField jTxtUrl;
357- private org.jdesktop.beansbinding.BindingGroup bindingGroup;
358- // End of variables declaration//GEN-END:variables
359-}
--- HtmlTest2/src/test1/HtmlParserCallback.java (revision 35)
+++ HtmlTest2/src/test1/HtmlParserCallback.java (nonexistent)
@@ -1,204 +0,0 @@
1-/*
2- * To change this license header, choose License Headers in Project Properties.
3- * To change this template file, choose Tools | Templates
4- * and open the template in the editor.
5- */
6-
7-package test1;
8-
9-import java.util.ArrayList;
10-import java.util.HashMap;
11-import javax.swing.text.MutableAttributeSet;
12-import javax.swing.text.html.HTML;
13-import javax.swing.text.html.HTMLEditorKit;
14-
15-/**
16- *
17- * @author kgto
18- */
19-public class HtmlParserCallback extends HTMLEditorKit.ParserCallback {
20-
21- // デバック情報表示フラグ
22- final boolean DEBUG = false;
23-
24- // Tag毎の階層
25- HashMap<HTML.Tag,Integer> tagMap = new HashMap<>();
26-
27- // serach key 情報
28- String keytag;
29- String keyid;
30- String keyclass;
31-
32- // serach key と一致時の情報退避
33- int bufCount = 0;
34- HTML.Tag bufTag = null;
35- MutableAttributeSet bufAttr = null;
36- // serach key と一致時の情報格納ワーク
37- StringBuilder bufText;
38-
39- // serach key と一致時のデータ一覧
40- ArrayList sData;
41-
42- public HtmlParserCallback(serachData skey) {
43-
44- // キー情報展開
45- keytag = skey.getHtmltag();
46- keyid = skey.getHtmlid();
47- keyclass = skey.getHtmlclass();
48-
49- sData = new ArrayList();
50- }
51-
52- public ArrayList getrtnData() {
53- return this.sData;
54- }
55-
56- @Override
57- public void handleStartTag(HTML.Tag tag, MutableAttributeSet attr, int pos){
58- // Tag毎の階層を保持
59- int count = 1;
60- if(tagMap.containsKey(tag)) {
61- count = tagMap.get(tag);
62- count++;
63- }
64- tagMap.put(tag, count);
65-
66- //--- DEBUG OUT ---- start ---
67- if(DEBUG) {
68- StringBuffer strBuf = new StringBuffer();
69- String ret;
70-
71- strBuf.append(count).append(" : F : ").append(tag.toString());
72- ret = (String)attr.getAttribute(HTML.Attribute.ID);
73- if(ret != null) {
74- strBuf.append(" [ID] ").append(ret);
75- }
76- ret = (String)attr.getAttribute(HTML.Attribute.CLASS);
77- if(ret != null) {
78- strBuf.append(" [CLASS] ").append(ret);
79- }
80- ret = (String)attr.getAttribute(HTML.Attribute.VALUE);
81- if(ret != null) {
82- strBuf.append(" [VALUE] ").append(ret);
83- }
84- System.out.println(strBuf);
85- }
86- //--- DEBUG OUT ---- end ---
87-
88- if(bufCount == 0) {
89- if(tag.toString().equals(keytag)) {
90- if(serachAttribute(attr)) {
91- bufCount = count;
92- bufTag = tag;
93- bufAttr = attr;
94- bufText = new StringBuilder();
95- }
96- }
97- }
98- }
99-
100- @Override
101- public void handleEndTag(HTML.Tag tag, int pos){
102- // Tag毎の階層を取得
103- int count = 0;
104- if(tagMap.containsKey(tag)) {
105- count = tagMap.get(tag);
106- }
107-
108- //--- DEBUG OUT ---- start ---
109- if(DEBUG) {
110- System.out.println(count + " : E : " + tag.toString());
111- }
112- //--- DEBUG OUT ---- end ---
113-
114- if(tag.equals(bufTag) && count <= bufCount) {
115-
116- // 溜め込んだ一致情報をリストへ格納
117- sData.add(bufText.toString());
118-
119- // 退避したserach keyとの一致情報クリア
120- bufCount = 0;
121- bufTag = null;
122- bufAttr = null;
123- bufText = null;
124- }
125-
126- // Tag毎の階層減算
127- tagMap.put(tag, --count);
128- }
129-
130- @Override
131- public void handleText(char[] data, int pos){
132- //--- DEBUG OUT ---- start ---
133- if(DEBUG) {
134- String dat = new String(data);
135- System.out.println(dat);
136- }
137- //--- DEBUG OUT ---- end ---
138- String splitchar = "\t";
139-
140- //制御文字の削除
141- // &nbsp; 0xa0
142- StringBuilder buf = new StringBuilder();
143- for(int i = 0; i < data.length; i++) {
144- if(data[i] > 0x1f && data[i] != 0x7f && data[i] != 0xa0) {
145- buf.append(data[i]);
146- }
147- }
148-
149- if(bufCount > 0) {
150- if(bufText.length() > 0) {
151- bufText.append(splitchar);
152- }
153- bufText.append(buf.toString());
154- }
155-
156- }
157-
158- @Override
159- public void handleSimpleTag(HTML.Tag tag, MutableAttributeSet attr, int pos){
160- //--- DEBUG OUT ---- start ---
161- if(DEBUG) {
162- StringBuffer strBuf = new StringBuffer();
163- String ret;
164- strBuf.append("x : S : ").append(tag.toString());
165- ret = (String)attr.getAttribute(HTML.Attribute.VALUE);
166- if(ret != null) {
167- strBuf.append(" [VALUE] ").append(ret);
168- }
169- System.out.println(strBuf);
170- }
171- //--- DEBUG OUT ---- end ---
172- }
173-
174- /**
175- * ページ内のID/CLASS値と検索キーを比較する。
176- * @param attr ページのMutableAttributeSet
177- * @return boolean 検索キーと一致の時、true
178- */
179- public boolean serachAttribute(MutableAttributeSet attr) {
180- String currentID = (String)attr.getAttribute(HTML.Attribute.ID);
181- String currentClass = (String)attr.getAttribute(HTML.Attribute.CLASS);
182-
183- if(keyid.isEmpty() == false && keyclass.isEmpty() == false) {
184- if(keyid.equals(currentID) && keyclass.equals(currentClass)) {
185- return true;
186- }
187- }
188-
189- if(keyid.isEmpty() == false) {
190- if(keyid.equals(currentID)) {
191- return true;
192- }
193- }
194-
195- if(keyclass.isEmpty() == false) {
196- if(keyclass.equals(currentClass)) {
197- return true;
198- }
199- }
200-
201- return false;
202- }
203-
204-}
--- HtmlTest2/src/test1/serachData.java (revision 35)
+++ HtmlTest2/src/test1/serachData.java (nonexistent)
@@ -1,82 +0,0 @@
1-/*
2- * To change this license header, choose License Headers in Project Properties.
3- * To change this template file, choose Tools | Templates
4- * and open the template in the editor.
5- */
6-
7-package test1;
8-
9-/**
10- *
11- * @author kgto
12- */
13-public class serachData {
14-
15- private String item;
16- private String htmltag;
17- private String htmlid;
18- private String htmlclass;
19- private String around;
20- private String regexp;
21-
22- public serachData() {
23- }
24-
25- public serachData(serachData dat) {
26- this.item = dat.getitem();
27- this.htmltag = dat.getHtmltag();
28- this.htmlid = dat.getHtmlid();
29- this.htmlclass = dat.getHtmlclass();
30- this.around = dat.getaround();
31- this.regexp = dat.getregexp();
32- }
33-
34- public void setitem(String item) {
35- this.item = item;
36- }
37-
38- public void setHtmltag(String htmltag) {
39- this.htmltag = htmltag;
40- }
41-
42- public void setHtmlid(String htmlid) {
43- this.htmlid = htmlid;
44- }
45-
46- public void setHtmlclass(String htmlclass) {
47- this.htmlclass = htmlclass;
48- }
49-
50- public void setaround(String around) {
51- this.around = around;
52- }
53-
54- public void setregexp(String regexp) {
55- this.regexp = regexp;
56- }
57-
58- public String getitem() {
59- return item;
60- }
61-
62- public String getHtmltag() {
63- return htmltag;
64- }
65-
66- public String getHtmlid() {
67- return htmlid;
68- }
69-
70- public String getHtmlclass() {
71- return htmlclass;
72- }
73-
74- public String getaround() {
75- return around;
76- }
77-
78- public String getregexp() {
79- return regexp;
80- }
81-
82-}
--- HtmlTest2/src/test1/HtmlParser.java (revision 35)
+++ HtmlTest2/src/test1/HtmlParser.java (nonexistent)
@@ -1,190 +0,0 @@
1-/*
2- * To change this license header, choose License Headers in Project Properties.
3- * To change this template file, choose Tools | Templates
4- * and open the template in the editor.
5- */
6-
7-package test1;
8-
9-import java.io.*;
10-import java.net.*;
11-import java.util.ArrayList;
12-import java.util.regex.Matcher;
13-import java.util.regex.Pattern;
14-import javax.swing.text.html.parser.ParserDelegator;
15-
16-/**
17- *
18- * @author kgto
19- */
20-public class HtmlParser {
21-
22- String UrlAdress;
23- String pageData;
24-
25- ArrayList sData;
26-
27- // 作業ワーク
28- String htmltag;
29- String htmlid;
30- String htmlclass;
31-
32- public HtmlParser() {
33- UrlAdress = null;
34- }
35-
36- public HtmlParser(String UrlAdress) {
37- this.UrlAdress = UrlAdress;
38- getpageData();
39- }
40-
41- public void seturl(String UrlAdress) {
42- this.UrlAdress = UrlAdress;
43- getpageData();
44- }
45-
46- public String search(serachData skey) {
47-
48- String item = skey.getitem();
49- String regexp = skey.getregexp();
50-
51- // htmlページ内を検索
52- if(isHtmlkeyEq(skey) == false) {
53- serchpageData(skey);
54- }
55-
56- // 検索位置を数値変換
57- String around = skey.getaround();
58- byte bAround = 0;
59- if(around.length() > 0) {
60- bAround = Byte.parseByte(around);
61- }
62-
63- if(bAround < sData.size()) {
64- String str = (String)sData.get(bAround);
65- String rtn = RegularExpression(str, regexp);
66- return item + "\t" + rtn;
67- }
68- return null;
69- }
70-
71- /**
72- * 直近のHTMLタグ/ID/CLASS値と引数の値を比較する。
73- * @param skey HTMLタグ/ID/CLASSが格納された検索キー
74- * @return boolean HTMLタグ/ID/CLASS値が一致する時、true
75- */
76- public boolean isHtmlkeyEq(serachData skey) {
77-
78- String stag = skey.getHtmltag();
79- String sid = skey.getHtmlid();
80- String sclass = skey.getHtmlclass();
81-
82- boolean rtn = true;
83-
84- // htmltag
85- if(htmltag == null) {
86- rtn = false;
87- } else {
88- if(htmltag.equals(stag) == false) {
89- rtn = false;
90- }
91- }
92-
93- // htmlid
94- if(htmlid == null) {
95- rtn = false;
96- } else {
97- if(htmlid.equals(sid) == false) {
98- rtn = false;
99- }
100- }
101-
102- // htmlclass
103- if(htmlclass == null) {
104- rtn = false;
105- } else {
106- if(htmlclass.equals(sclass) == false) {
107- rtn = false;
108- }
109- }
110-
111- if(!rtn) {
112- htmltag = stag;
113- htmlid = sid;
114- htmlclass = sclass;
115- }
116-
117- return rtn;
118- }
119-
120- /**
121- * 正規表現検索
122- * @param strdata
123- * @param regexp
124- * @return
125- */
126- public String RegularExpression(String strdata, String regexp) {
127- String expdata = null;
128-
129- //regexpのチェック
130- if(regexp.isEmpty()) {
131- expdata = strdata;
132- return expdata;
133- }
134-
135- //正規表現検索
136- Pattern ptn = Pattern.compile(regexp);
137- Matcher matchdata = ptn.matcher(strdata);
138- if (matchdata.find()) {
139- if(matchdata.groupCount() >= 1) {
140- expdata = matchdata.group(1);
141- }
142- }
143- return expdata;
144- }
145-
146- /**
147- * インターネット接続
148- */
149- public void getpageData() {
150- try {
151- URL url = new URL(UrlAdress);
152- HttpURLConnection con = (HttpURLConnection)url.openConnection();
153- con.setRequestMethod("GET");
154- BufferedReader reader = new BufferedReader(
155- new InputStreamReader(con.getInputStream(), "utf-8"));
156- String wkline;
157- StringBuilder sb = new StringBuilder();
158- while((wkline = reader.readLine()) != null) {
159- sb.append(wkline).append("\n");
160- }
161- pageData = sb.toString();
162-
163- con.disconnect();
164- }
165- catch(IOException e) {
166- System.err.println(e);
167- }
168- }
169-
170- /**
171- * HTMLパーサ
172- * @param skey
173- */
174- public void serchpageData(serachData skey){
175- Reader reader;
176- try {
177- reader = new BufferedReader(new StringReader(pageData));
178- HtmlParserCallback cb = new HtmlParserCallback(skey);
179- ParserDelegator pd = new ParserDelegator();
180- pd.parse(reader, cb, true);
181- reader.close();
182-
183- sData = cb.getrtnData();
184-
185- } catch (IOException e) {
186- System.err.println(e);
187- }
188- }
189-
190-}