Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Опять про файлы... 
:(
    Опции темы
sezin
Дата 31.3.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.3.2006
Где: Россия

Репутация: нет
Всего: нет



Я понимаю, что уже много раз говорилось про чтение/запись файлов. Но в большинстве случаев все описывалось про строки или массив байт.
А как быть если файл состоит из строк, содержащих несколько числовых значений каждая? Прочитать строку - понятно, но что с ней дальше делать? Прочитать байты? А сколько? Если там числа double c точностью до 8 знаков!!! Если у кого есть исходники или надумки - smile

Заранее благодарен всем откликнувшимся.
PM MAIL ICQ MSN   Вверх
ALKS
Дата 31.3.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



простейший способ - вычитываеш по строчно и каждуй строку парсиш каким-либо образом.
Способов масса. нарпимер java.util.StringTokenizer, регулярные выражения, преобразование строки в ByteArray и манибуляция с байтами. куча возможностей smile
PM   Вверх
Goliath
Дата 31.3.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 1.3.2005

Репутация: 1
Всего: 5



Код

import java.io.*;
public class StreamToken
{
  public static void main(String args[])
  {
    DataOutputStream OutStream;
    DataInputStream  InStream;
    byte bKbdInput[] = new byte[256];
    String sOut;
    try
    {
      System.out.println(
        "Enter string to parse...");
      System.in.read(bKbdInput);
      sOut = new String(bKbdInput, 0); 
      OutStream = new DataOutputStream(
        new BufferedOutputStream(
          new FileOutputStream(
           "output.txt")));
      OutStream.writeBytes(sOut);
      OutStream.close();
      InStream = new DataInputStream(
        new BufferedInputStream(
          new FileInputStream(
            "output.txt")));
      TokenizerOfStream tos = 
        new TokenizerOfStream();
      tos.TokenizeIt(InStream);
      InStream.close();
      System.out.println(
        "Press <Enter> to terminate...");
      System.in.read(bKbdInput);
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
  }
}
class TokenizerOfStream
{
  public void TokenizeIt(InputStream is)
  {
    StreamTokenizer stok;
    String str;
    try
    {
      stok = new StreamTokenizer(is);
      stok.slashSlashComments(true);
      stok.ordinaryChar('.');
      while(stok.nextToken() !=
         StreamTokenizer.TT_EOF)
      {
        switch(stok.ttype)
        {
          case StreamTokenizer.TT_WORD:
          {
            str = new String(
              "\nTT_WORD >" + stok.sval);
            break;
          }
          case StreamTokenizer.TT_NUMBER:
          {
            str = "\nTT_NUMBER >" +
               Double.toString(stok.nval);
            break;
          }
          case StreamTokenizer.TT_EOL:
          {
            str = new String("> End of line");
            break;
          }
          default:
            {
              if((char)stok.ttype == '"')
              {
                str = new String(
                  "\nTT_WORD >" + stok.sval);
              }
              else
                str = "> " + 
                  String.valueOf(
                    (char)stok.ttype);
            }
        }
        System.out.println(str);
      }
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
  }
}

--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
sezin
Дата 3.4.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.3.2006
Где: Россия

Репутация: нет
Всего: нет



Спасибо, но мне сделали попроще...

Код

private static StringTokenizer tokenizer = null;

private static List strings = new ArrayList();

private static void processLine(String string) {
    List values = new ArrayList();
    String token = "";
    Double result = null;
    
    tokenizer = new StringTokenizer(string, " ");
    
    while (tokenizer.hasMoreElements()) {
        token = (String) tokenizer.nextElement();
        System.out.println("Parsing: " + token);
        try {
            result = Double.valueOf(token);
            values.add(result);
            System.out.println("Added: " + result);
        } catch (NumberFormatException e) {
            continue;
        }
    }
    strings.add(values);
}


Правда не решена проблема с разделителем. Пока там только пробел...

Это сообщение отредактировал(а) sezin - 3.4.2006, 13:57
PM MAIL ICQ MSN   Вверх
Goliath
Дата 3.4.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 1.3.2005

Репутация: 1
Всего: 5



В примере, в котором я привел, показано как определять разделители
Код

 if((char)stok.ttype == '"')
              {
                str = new String(
                  "\nTT_WORD >" + stok.sval);
              }

В место кавычки там может быть нужный разделитель, например }, ;

--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
wampire
Дата 3.4.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.4.2006
Где: Киев

Репутация: нет
Всего: нет



Есть такой себе Scanner.
В пакете java.util.

Цитата

public final class Scanner
extends Object
implements Iterator<String>

A simple text scanner which can parse primitive types and strings using regular expressions.
A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens may then be converted into values of different types using the various next methods.
For example, this code allows a user to read a number from System.in:
Код

     Scanner sc = new Scanner(System.in);
     int i = sc.nextInt();


As another example, this code allows long types to be assigned from entries in a file myNumbers:
Код

      Scanner sc = new Scanner(new File("myNumbers"));
      while (sc.hasNextLong()) {
          long aLong = sc.nextLong();
      }



З.Ы. Правда эта штукенция доступна в 1.5-ой версии :-)

Это сообщение отредактировал(а) wampire - 3.4.2006, 16:54
PM MAIL ICQ MSN   Вверх
sezin
Дата 4.4.2006, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 30.3.2006
Где: Россия

Репутация: нет
Всего: нет



Цитата(wampire @ 3.4.2006, 16:51)
Есть такой себе Scanner.
В пакете java.util.

З.Ы. Правда эта штукенция доступна в 1.5-ой версии :-)

Я Java изучаю меньше месяца, поэтому не успел еще всех возможностей предыдущих версий изучить...
А штукенция действительно интересная smile
Надо почитать будет на досуге...
PM MAIL ICQ MSN   Вверх
wampire
Дата 4.4.2006, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.4.2006
Где: Киев

Репутация: нет
Всего: нет



Я, наверное, не совсем корректно выразился.

Цитата

Version 1.5.0 or 5.0?
Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.

The number "5.0" was arrived at by dropping the leading "1." from "1.5.0". Where you might have expected to see 1.5.0, it is now 5.0 (and where it was 1.5, it is now 5).


Так будет точнее :-)
PM MAIL ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.