IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Java. Считать html блоками. (http://www.imho.ws/showthread.php?t=86248)

Sam Dark 24.05.2005 12:57

Java. Считать html блоками.
 
На Java писать только начал.

Задача: считать html блоками (<блок>блок</блок>).

Начал делать так:

Код:

public class block
{
  public static String text;
  public static String type;
 
  public block(String txt, String typ)
  {
    text=txt;
    type=typ;
  }
}

Код:

import java.io.*;

public class blockreader{
  private static boolean flag;
  private static int pos;
  private static char buf;
  public static block block;
  private static InputStream fstream;
 
  public blockreader(String file)  {
    try{
      fstream = new FileInputStream(file);
      pos = 0;
      flag=true;
    }
    catch (FileNotFoundException e){
        System.out.println("File " + file + " not found.");
        flag=false;
    }
  }
 
  public static boolean readblock(){
  if (flag){
    try{
        if (fstream.available()>0){
          buf=(char) fstream.read();
          if ((buf!=13) && (buf!=10)){
            if (buf=='<'){
              block = new block("","tag");
              buf=(char) fstream.read();
              if (fstream.available()>0){
                if (buf=='/'){
                  block.type="ctag";
                }
                else{
                  block.text=block.text+buf;
                }
              }
              while (fstream.available()>0){
                buf=(char) fstream.read();
                if (buf=='>'){break;}
                else{
                  block.text=block.text+buf;
                }
              }
              return true;
            }
            else{
              block = new block(""+buf,"text");
              while (fstream.available()>0){
                buf=(char) fstream.read();
                if (buf=='<'){
                  block.type="tag";
                  break;
                }
                else{
                  block.text=block.text+buf;
                }
              }
              return true;
            }
          }
          //!
          return true;
        }
        else{
          fstream.close();
          return false;
          //eof
        }
      }
      catch (Exception e){
        e.printStackTrace();
        return false;
      }
    }
    else
    {
      return false;
    }
  }
}

Код:

public class main
{   
  public static void main(String args[])
  {
    RusTxt rus = new RusTxt();
    if( args.length == 0 )
    {
      System.out.println("No filename.");
      return;
    }
    else
    {
      blockreader bl = new blockreader(args[0]);
      //read all blocks
      while (bl.readblock())
      {
        System.out.println( bl.block.type + "-" + bl.block.text + "\n" );
      }
    }
  }
}

Понимаю, что всё плохо. Подскажите как лучше сделать.

/7y3uK 24.05.2005 14:19

1. Отдельные топики создавать незачем :) по джаве уже есть топики.
2. Можно поинтересоваться зачем такая штука нужна?
У меня есть подозрения, что можно все проще решить... а парсить текстовые данные - всегда гемор...
3. Зачем поток объявлен как статик? Статик - это, простыми словами, значит что этот заприваченый поток будет один на все экземпляры класса, т.е. если класс дернуть два раза и начать парсить два разных файла - пойдут глюки неимоверные...

Sam Dark 24.05.2005 18:30

Почитал свой пост... ужас. Что может сделать с человеком бессонная ночь...

Уже реализовал проще и лучше. На всё ушло 10 мин. :)

1. Сорри.
2. Штука нужна для сдачи зачёта. Ну и для себя. Поучится.
3. Это уже понял и переписал.

Если кому понадобится - скину код.


Часовой пояс GMT +4, время: 06:48.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.