Чтение базы данных текстовых файлов и отображение результатов - PullRequest
0 голосов
/ 17 января 2012

У меня есть база данных в виде текстового файла, моя задача - проанализировать текстовый файл и отобразить данные в виде списка. Я понятия не имею, с чего начать.

Вот пример записи. "| 9251115 |, | 0 |, | ДЕТАЛИ |, ||, ||, | Текст заголовка Цена Текст |, ||, ||

Где каждый || представляет поле. Есть также HTML-теги между ценой заголовка и текстом (p, b)

Моей первой идеей было бы проанализировать его аналогично XML-документу, то есть создать новую строку, начинающуюся с «|», заполнить ее всем, что находится между, и завершить строку, когда она достигнет следующего »| ». Но я до сих пор не знаю, как это сделать.

EDIT:

Пока делаю это по одному шагу. Использование stringtokenizer для чтения его построчно и удаления «,» для начала. Столкнувшись с проблемой, текстовое представление для отображения результатов почему-то отображает false вместо отсканированного текста. вот мой код, если кому-то нужен хороший хедшкратер.

Context myContext;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView t = (TextView) findViewById(R.id.text);
    st = new ArrayList<property>();

    try
    {
         InputStream is;
         is = myContext.getAssets().open("rooms.txt");
         BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
         String read = br.readLine();
         while( read != null)
         {
             StringTokenizer st = new StringTokenizer(read,",");
             {
                 while(st.hasMoreTokens())
                 {
                     String a = st.nextToken();
                     String b = st.nextToken();
                     String c = st.nextToken();
                     String d = st.nextToken();
                     String e = st.nextToken();
                     String f = st.nextToken();
                     String g = st.nextToken();
                     String h = st.nextToken();
                     t.setText(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h);
                 }
             }
         }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

Ответы [ 3 ]

0 голосов
/ 17 января 2012

Вот как бы я это сделал,

Have an object with getter/setter
Have a list intialized
1) You  need to use StreamReaders/Bufferedreader to read the file 
2) If each is not empty
  2a) Use StringTokenizer to parse the string with "," as delimiter
  2b) Set tokenized values to object
  2c) Add object to list
3) return the list created in above step.

Примечание. Если при работе с большими данными вам необходимо соблюдать осторожность при чтении всего файла, вы можете получить OutofMemoryError.

0 голосов
/ 17 января 2012

Бруно Оливейра дал очень хороший совет.

Вы можете проанализировать ваш файл, прочитав его построчно, а затем использовать метод string.split , в результате вы получите все свои данные в массиве, который вы легко сможете прочитать и поместить в представление списка. или переместите его в базу данных sqlite.

0 голосов
/ 17 января 2012

Хотя вы определенно можете реализовать свой собственный синтаксический анализатор, используя чистый Java-код, вам следует рассмотреть возможность использования базы данных SQLite (1) для хранения ваших данных, что позволит вам гораздо проще вставлять, удалять, изменять и запрашивать.

Если ваша база данных поступает в таком формате из внешнего источника, я бы написал одноразовый анализатор, который анализирует данные и вставляет их в базу данных SQLite для будущего использования.

Помните, что процессор на устройствах Android работает медленнее, чем средний процессор ПК, поэтому, если вы постоянно анализируете большие объемы данных в этом формате, ваше приложение может работать очень медленно. Отсюда мое предложение преобразовать его в базу данных.

Другой вариант, который у вас есть в этом случае, - это использование XML, как вы сказали, потому что есть готовые парсеры. Но совет по поводу производительности остается: вам действительно следует избегать повторной обработки данных все время и вместо этого хранить их в готовом для использования формате.

(1): http://developer.android.com/reference/android/database/sqlite/package-summary.html

...