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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> импорт файла, создание подобия импортирования файлов 
:(
    Опции темы
suomi
Дата 20.11.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А может поясните вот как сделать что-то типа импорта файла, в файле у меня будут записаны ключевые слова в квадратных скобочках, и нужно считывать и сохранять строки строки сразу после них, т.е
------Файл 1.txt
[Фамилия]
Иванов 
[Телефон]
2-435-24
[Хобби]
Люблю погулять с собакой
и попить чай
[Пол]
мужской


Т.е я хочу чтобы соответствующие поля считанные вставлялись в соответствующие JTextField-ы
Например, считываю я первую строку - там [Фамилия], значит след. строку нужно записать в текстовое поле Family


Может у кого есть методы получше как организовать импорт подобного файла?
PM MAIL   Вверх
LSD
Дата 20.11.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt")));
JTextField currentField;
String str;
while((str = reader.readLine().trim()) != null)
{
  if(str.equalsIgnoreCase("[Фамилия]"))
  {
    currentField = lastNameTextField;
  }
  else if(str.equalsIgnoreCase("[Телефон]"))
  {
    currentField = phoneTextField;
  }
  else
  {
    currentField.setText(str);
  }
}
reader.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   Вверх
suomi
Дата 20.11.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, это понятно! Вот только как реализовать, я вот хочу сначала заполнить массив строк, каждый элемент которого - есть считанная строка, а потом вот как не знаю обрабатывать его!
Что-то типа этого :
String s = String s[c];
//c-количество строк в файле


А вот дальше нужно в цикле обрабатывать этот массив строк -мол если текущий элемент массива строк равен [Фамилия] или [Телефон]
то сохранить в переменной  слудующий эдемент массива  и т.д.

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


Leprechaun Software Developer
****


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

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



В чем трудности?
Код
for(int i = 0; i < strings.length; i++)
{
  if(strings[i].equals("[Фамилия]"))
  {
    i++;
    someVar = strings[i];
  }
  else if(strings[i].equals("[Телефон]"))
  {
    i++;
    anotheVar = strings[i];
  }
  ....
}



--------------------
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   Вверх
suomi
Дата 20.11.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Lsd извини, я просто видимо не очень корректно вопрос поставил, трудность в том, что нужно считать данные в соответствующие поля, сразу после так называемых моих разделителей, то есть 
[Хобби]
1-ая строка Люблю воллейбол
2-ая строка Погулять с собакой
...........................................
[Телефон]
3333333333

и так далее


Да понятно, что в случае с Телефоном - там дальше одна строка и достаточно увеличить строку на один и мы ее считаем, а вот в случаи с Хобби там увы неизвестно сколько строк идет далее, но известно, что если следующая строка начинается с символа "[" то все дальше считывать не нужно,т.е. считывание происходит до начала символа "[", а не слежующую строку, вот с этим трудности.
 


Код


//алгоритм

   String[] masstr = new String[10];
              String currentField = new String();
              String str = "";
              int j = 0;
              while ((str = in.readLine()) != null) {
               masstr[j] = str;
               System.out.println("masstr " + masstr[j]);
               txt.append(str + "\n");
               j++;
             }
             in.close();
             
           
             for(int g = 0; g < j;g++)
             {
               if(masstr[g].equalsIgnoreCase("[Фамилия]"))
               {
                 currentField = masstr[g+1];
               }
                  System.out.println("masstr " + masstr[g]);
              }
                System.out.println("naideno " + currentField);

           } 


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


Leprechaun Software Developer
****


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

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



Например так:
Код
String[] strings = new String[0];
String curentKey = "[Default]";
HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
for(String str : strings)
{
  if(str.startsWith("[") && str.endsWith("]"))
  {
    curentKey = str;
  }
  else
  {
    ArrayList<String> list = map.get(curentKey);
    if(list == null)
    {
      list = new ArrayList<String>();
      map.put(curentKey, list);
    }
    list.add(str);
  }
}

получим HashMap, где в качестве ключа будет название раздела, а в качестве значения список строк в этом разделе.


--------------------
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   Вверх
suomi
Дата 20.11.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



LSD слушай или я чего-то туплю или чего, но JBuilder мой ругается на 
    HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

Грит мол "choos.java": Error #: 207 : not an expression statement at line 92, column 21

пробовал вот так   Map<String,String> staff = new HashMap<String,String>(); так же
 
Импортирую 
import java.util.*;
import java.util.HashMap;

Есче на цикл вот этот ругается, я честно его первый раз вижу, но все-таки смотрится весьма солидно
 for(String str : strings)


Вот приведу кусок программы
Код

 public void open() {

    JFileChooser fc = new JFileChooser();
    fc.setCurrentDirectory(new File("."));
    ExtFileFilter ff1 = new ExtFileFilter("txt", "*.txt — текстовые файлы");
    fc.addChoosableFileFilter(ff1);
    ExtFileFilter ff2 = new ExtFileFilter(".doc", "*.doc — документы Word");
    fc.addChoosableFileFilter(ff2);
    if( fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
          File f = fc.getSelectedFile();
          currentFile = f;

          try
           {
              FileInputStream inF = new FileInputStream(currentFile);
              //DataInputStream in = new DataInputStream(inF,"Cp866");
              BufferedReader in = new BufferedReader(new InputStreamReader(inF,"Cp1251"));

              PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out,"Cp866"),true);


              String[] masstr = new String[10];
              String currentField = new String();
              String str = "";
              int j = 0;
              while ((str = in.readLine()) != null) {
               masstr[j] = str;
               System.out.println("masstr " + masstr[j]);
               txt.append(str + "\n");
               j++;
             }
             in.close();
             
          }
          catch(IOException ex)
          {
            ex.printStackTrace();
          }
          
    }

             String[] strings = new String[0];
             String curentKey = "[Default]";
             Map<String,String> staff = new HashMap<String,String>();
             HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
             for(String str : strings)
             {
               if(str.startsWith("[") && str.endsWith("]"))
               {
               curentKey = str;
             }
             else
             {
               ArrayList<String> list = map.get(curentKey);
               if(list == null)
               {
                 list = new ArrayList<String>();
                 map.put(curentKey, list);
               }
               list.add(str);
             }
             }

  }




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


Leprechaun Software Developer
****


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

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



Это синтаксис JDK 1.5, если без него то мой код будет выглядеть так:
Код
String[] strings = new String[0];
String curentKey = "[Default]";
HashMap map = new HashMap();
for(int i = 0; i < strings.length; i++)
{
  String str = strings[i];
  if(str.startsWith("[") && str.endsWith("]"))
  {
    curentKey = str;
  }
  else
  {
    ArrayList list = (ArrayList) map.get(curentKey);
    if(list == null)
    {
      list = new ArrayList();
      map.put(curentKey, list);
    }
    list.add(str);
  }
}



--------------------
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   Вверх
suomi
Дата 20.11.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Огромное тебе спасибо LSD все работает, странно что у меня JDK 1.6 но все равно не кушал эти конструкции!

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


Leprechaun Software Developer
****


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

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



Цитата(suomi @  20.11.2006,  17:27 Найти цитируемый пост)
Огромное тебе спасибо LSD все работает, странно что у меня JDK 1.6 но все равно не кушал эти конструкции!

Скорее всего в опциях компиляции стояла совместимость с JDK 1.4.


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

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

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


 




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


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

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