Очень странно читается файл 8)

Тема в разделе "WASM.HEAP", создана пользователем device, 22 ноя 2007.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Столкнулся с такой проблемой:
    Написал парсер файлов, таких как этот:
    Код (Text):
    1. #Это комментарий
    2. a=0 #здесь а равно 0
    3. b=5 #comment of b
    4. c=7 #Это комментарий#который будет опущен парсером
    5. #ret
    Прогу уложил в 209 строк. Работает. Однако, если файл заканчивается словом RET, то выдается Исключение "Stack is Empty". Если после RET вставить еще какую-нибудь строку, то все работает.

    Ради интереса написал метод
    Код (Text):
    1.  boolean IS_STACK_EMPTY()
    и увидел такой парадокс:
    Стек становится пустым при десятом прогоне программы. То есть файл не читается. Однако если в этот файл что-нибудь записать, то он начинает снова нормально читаться. И так до десятого прогона. Дальше опять надо после RET вставлять строку.

    Первый раз такое вижу. Это что, особенность файловой системы?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Ошибка скорее всего в 208 строке, нюхом чувтсвую!
     
  3. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    censored
    Если бы ошибка была связана с кодом, я бы тут не задавал такой вопрос. Проблема с файлом по любому.

    Кстати, в строке 208 у меня всего 1 символ: ' } '.

    Нарушая правила форума, я приведу код... Но я в нем уверен.

    Код (Text):
    1. // и так, на этом участке происходит обработка файла
    2.  
    3. void fileParseNow(){
    4. /** Let COUNTER will be NULL **/
    5. COUNTER=0;
    6. Thread proc = new Thread(
    7.  
    8. new Runnable(){
    9.  
    10.     public void start()
    11.     {
    12.     COUNTER=COUNTER+1;
    13.     run();
    14.     }
    15.  
    16.     public void run()
    17.     {
    18. try{
    19. BufferedReader br = new BufferedReader (new InputStreamReader (fis));
    20. //COUNTER=COUNTER+1;
    21. String CurrentLine = null;
    22. while ( (CurrentLine=br.readLine())!=null) {
    23. StringTokenizer parserComment = new StringTokenizer(CurrentLine,"#",false);
    24.  
    25. /**
    26. Parsing comments
    27. **/
    28.  
    29. if (parserComment.countTokens()==1){
    30. /**
    31. #This is Single line comment such as
    32.  
    33. **/
    34.  
    35. printf("Comment: %s\n",CurrentLine);
    36.  
    37. }else if( (parserComment.countTokens()>2) || (parserComment.countTokens()==2)){
    38. /**
    39. Here we can see #comment with more lines####
    40. **/
    41. String line=parserComment.nextToken();
    42. String comment=parserComment.nextToken();
    43. printf("Line: %s\nComment: %s\n",line,comment);
    44.  
    45. /** Next, we parsing LINE **/
    46.  
    47. StringTokenizer parserLine = new StringTokenizer(line,"=");
    48.  
    49. String FIRST = parserLine.nextToken();
    50. String SECOND = parserLine.nextToken();
    51.  
    52. PUSH ( FIRST, SECOND );
    53.  
    54. printf("%s :: %s\n",FIRST,SECOND);
    55.  
    56. }
    57. }
    58.  
    59. printf("Stopped with error (EOF?)");
    60.  
    61. }catch (Exception e){
    62.  
    63. e.printStackTrace();
    64.  
    65. }
    66.  
    67.     }
    68.  
    69. }
    70.  
    71. );
    72.  
    73. proc.start();
    74.  
    75. }
    Думаю, модераторы простят.

    Алгоритм сбора данных из файла нормальный. Хотя... Может я с Thread ом переборщил...
     
  4. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    device
    думаю censored стебанулся т к как без кода можно предположить что случилось?

    )))врядли. бока в твоем коде
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    device, пиши на асме, меньше будет таких "особенностей ФС"