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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение чисел из файла, Читать числа без "анализа строки" 
:(
    Опции темы
oguretzz
Дата 25.9.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Допустим программа должна работать с файлом-библиотекой, такого типа: double double string. 
Т.е. например:
0.66 0.87 Cs-137
0.79 0.57 Cs-134
......и т.д.

Вопрос такое: как без анализа строки просто считать данные из такого файла?

Дело в том, я новичок в Java, а в C++ подобные вещи делал очень просто через оператор ">>". Таким образом не анализируя строку (это уже описано в операторной ф-ции ">>") просто считывал значения нужного типа. Есть подозрение что аналогичным образом можно действовать и в Java, но я пока не нашел подходящего способа. 

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


PM MAIL   Вверх
LSD
Дата 25.9.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Код
Scanner scanner = new Scanner(new File("input.txt"));
double d = scanner.nextDouble();
int i = scanner.nextInt();



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
powerOn
Дата 25.9.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Допустим есть у нас такой txt файл:
Цитата

123 456 Hello
7890 12345 Test


Вот код программы нашей:
Код

import java.io.FileInputStream;
import java.util.Scanner;

public class NewClass {
    public NewClass() {
    }
    
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("newfile.txt");
            Scanner sc = new Scanner(fis);
            while(sc.hasNext()) {
            System.out.println("int = " + sc.nextInt()); 
            System.out.println("int = " + sc.nextInt());
            System.out.println("string = " + sc.next());
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}


Вот результат её выполнения:
Цитата

int = 123
int = 456
string = Hello
int = 7890
int = 12345
string = Test


Добавлено @ 17:02 
Оперэдыли!!!


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 25.9.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(powerOn @  25.9.2006,  18:01 Найти цитируемый пост)
Вот код программы нашей:

Маленькое дополнение, я в своем примере не написал, и тут тоже не указанно, но потоки надо закрывать за собой.
Код
scanner.close();



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ma_lover
Дата 25.8.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



powerOn, добрый день.

Поддерживает ли Ваш вариант программы с использованием метода Scanner чтение арифметических операций?
Когда я ввёл в текстовом файле знаки арифметических операций, то стектрейс вывел следующее:

java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:819)
    at java.util.Scanner.next(Scanner.java:1431)
    at java.util.Scanner.nextInt(Scanner.java:2040)
    at java.util.Scanner.nextInt(Scanner.java:2000)
    at NewClass.main(NewClass.java:13)


Заранее спасибо.

Это сообщение отредактировал(а) ma_lover - 25.8.2007, 14:40
PM MAIL   Вверх
LSD
Дата 26.8.2007, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(ma_lover @  25.8.2007,  15:37 Найти цитируемый пост)
Поддерживает ли Ваш вариант программы с использованием метода Scanner чтение арифметических операций?

Смотря что подразумевать под чтением арифметических операций. Если нужно прочитать сами знаки этих операций, то да поддерживает. Их надо читать через next(). А если надо провести вычисления по этим операциям, то тут уже нужно использовать скриптовые языки, типа BeanShell.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ma_lover
Дата 26.8.2007, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нужно счиать сами знаки для начала..а потом провести вычисления по этим операциям, но для этого я хочу написать свой алгоритм. Не могли бы вы дать небольшой пример с методом next , чтобы было понятнее.
Спасибо.
PM MAIL   Вверх
LSD
Дата 26.8.2007, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Вот слегка модифицированный пример powerOn:
Код

import java.io.*;
import java.util.*;

public class Scan
{
  public static void main(String[] args)
  {
    try
    {
      FileInputStream fis = new FileInputStream("file.txt");
      Scanner sc = new Scanner(fis);
      while(sc.hasNext())
      {
        System.out.println(sc.nextInt()); 
        System.out.println(sc.next());
        System.out.println(sc.nextInt());
      }
      fis.close();
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
  }
}

Код

12 + 5
13 * 7



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Kisja
Дата 17.12.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(powerOn @ 25.9.2006,  17:01)


Сканер - это хорошая штука, только вот мне нужно прочитать данные из строк такого типа:
Цитата

      1                 54782   ИВАНОВ СЕРГЕЙ ПЕТРОВИЧ                           446.43  100385


где 446.43 - число типа double.

Для чтения пробую использовать код:
Код

            Scanner sc = new Scanner(inStr);
            String rest, k;
            Double v;
            rest = sc.next();
            k = sc.next();
            rest = sc.next();
            rest = sc.next();
            rest = sc.next();
            v = sc.nextDouble();
            ...


При чтении значения v = sc.nextDouble(); получаю ошибку java.util.InputMismatchException (не совпадает тип). Когда число записано как 446,43 (с запятой вместе точки), то сканер воспринимает его как double. Как быть?


PM MAIL   Вверх
Kangaroo
Дата 17.12.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Kisja, Scanner использует текущую локаль для определения формата чисел. Поэтому вам нужно задать локаль, в которой вещественные числа через точку.
Попробуйте вот так:
Код

Scanner s = new Scanner("34.56");
        s.useLocale(Locale.US);
        s.nextDouble();
s.close();



--------------------
Lost....
PM MAIL 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.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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