Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Считывание данных


Автор: stadograchey 17.6.2010, 11:26
HI!
Прошу помочь в решении простой задачи так как я начинающий. Есть файл с множеством строк, а строка состоит из множества цифер, вот в таком вот формате:
123;555;6;7;9;-;22;1111;2;3;4;6;7;9;-;;5;;;;;;3;7;9;77;912300000888888999998898989;555;6;7;9;-;22;1111;2;3;4;6;7;9;-;;5;;;;;;3;7;9;77;9
мне необходимо вытащить одну из таких строк в консоль по идентификатору, а тоесть какому то номеру. Следовательно я ввожу номер который программа должна найти в какой то из строк и затем вывести эту строку в консоль к примеру........Вот код в котором я описал одну строку. Как то можно сделать, что программа далее автоматически делала тоже самое как описано по поводу первой строки. Какие методы можно использовать?Sorry за глупые вопросы только взялся за Java...
Код

public class q2 {
        public static void main(String args[])
                                   throws IOException {
System.out.println("input DATA");
BufferedReader in=new BufferedReader (new InputStreamReader (System.in));
String DATA;
DATA= in.readLine();
long value = Long.parseLong(DATA);
FileInputStream fis =
                           new FileInputStream("data.txt");
                         DataInputStream dis =
                                           new DataInputStream(fis);
                         String s = dis.readLine();
                         String s1 = dis.readLine();
                         String s2;
                         s2=s1.substring(38,54);
                         long number = Long.parseLong(s2);
                         if (number==value){
                             System.out.print("There is your session"+s1);}
                         dis.close();
                     }
    }

Автор: EnJ 17.6.2010, 18:19
Чтобы читать с консоли используй java.util.Scanner:
Код

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


Кидаешь свои методы в цикл while(условие остановки работы программы) {...} и поехал.
Примером условия остановки может быть ввод НЕ числа(для простоты). Соответственно это условие надо корректно обработать ;)

Автор: stadograchey 18.6.2010, 10:10
Класс Scaner в состоянии обработать файл допустим размером около 300 мБ???????????

Автор: jk1 18.6.2010, 11:44
Цитата

Класс Scaner в состоянии обработать файл допустим размером около 300 мБ??????????? 

Способен, лишь бы у Вас памяти хватило вычитать его целиком. Если это же занимать столько памяти невозможно или нежелательно, попробуйте Memory Mapped File:
Код

public class LargeMappedFiles {
  static int length = 0x8FFFFFF; // 128 Mb
  public static void main(String[] args) throws Exception {
    MappedByteBuffer out = 
      new RandomAccessFile("test.dat", "rw").getChannel()
      .map(FileChannel.MapMode.READ_WRITE, 0, length);
    for(int i = 0; i < length; i++)
      out.put((byte)'x');
    System.out.println("Finished writing");
    for(int i = length/2; i < length/2 + 6; i++)
      System.out.print((char)out.get(i));
  }
} 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)