forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Чтение произвольной строки из ресурса (http://forum.boolean.name/showthread.php?t=7296)

Skythrone 09.11.2008 00:39

Чтение произвольной строки из ресурса
 
Вот такая штука.

Есть прога, которая читает текстовую информацию из ресурса. Несколько сотен строк.
Это у меня сделано так - создаю строчный массив, потом через Lib_res загружаю в него данные построчно, потом выдаю на экран тот или иной элемент данного массива.

Но есть существенные минусы:
- мидлет долго запускается
- массив жрёт память, а пользы от него мало. В процессе работы мидлета пользователю выдаются не все записи, а только лишь некоторые.
Соответственно, КПД такой схемы довольно низкий.

Я тут подумал. А можно ли читать из текстового ресурса произвольную строчку?
Я бы тогда просто открыл ресурс при старте мидлета, а потом просто запрашивал нужную строчку.

Phantom 09.11.2008 01:01

Ответ: Чтение произвольной строки из ресурса
 
Нельзя. Как же мидлет заранее узнает где начинается новая строка? Вот если у тебя заранее известен индекс каждой строчки в файле или если длинна всех строк одинакова, тогда наверно можно прочитать ресурс с определённого байта (не сначала, как обычно, а с любого места файла).

Cliffe Snake 09.11.2008 08:48

Ответ: Чтение произвольной строки из ресурса
 
Skythrone, а кто тебе мешает организовать свою схему считывания ресурсного файла на чистом МП? Использование библиотек не всегда лучший способ.
В некоторых случаях лучше использовать стандартные средства МП.

Phantom 10.11.2008 02:57

Ответ: Чтение произвольной строки из ресурса
 
Кстати, так можно или нет считать ресурс не сначала, а с определённого места? Если можно, то как?

Dr.SanX 10.11.2008 11:34

Ответ: Чтение произвольной строки из ресурса
 
Вложений: 1
Пример чтения нужной строки из Text.txt

Skythrone 11.11.2008 12:25

Цитата:

Сообщение от Phantom_wc (Сообщение 90289)
Нельзя. Как же мидлет заранее узнает где начинается новая строка? Вот если у тебя заранее известен индекс каждой строчки в файле или если длинна всех строк одинакова, тогда наверно можно прочитать ресурс с определённого байта (не сначала, как обычно, а с любого места файла).

В принципе, я могу подсчитать такой индекс, так что прога будет знать, где начинается нужная строка.
А как мне прочитать данные, начиная с нужного оффсета? Какой функцией?

Цитата:

Сообщение от Cliffe Snake (Сообщение 90307)
Skythrone, а кто тебе мешает организовать свою схему считывания ресурсного файла на чистом МП? Использование библиотек не всегда лучший способ.
В некоторых случаях лучше использовать стандартные средства МП.

Во-первых, библиотека полезна тем, что она весьма быстро читать строки в win-1251 и на лету преобразует их в UTF.

Во-вторых, я не нашёл встроенных средств в MP для чтения данных из ресурса, начиная с заданного места (оффсет).

Цитата:

Сообщение от Dr.SanX (Сообщение 90363)
Пример чтения нужной строки из Text.txt

Дык это ж зверски торомозно! :(

У меня всё упирается в скорость работы на телефоне. В ресурсном txt-файле более 1000 строк. Каждая строка - определённое сообщение интерфейса.

Подобный перебор всех строк последовательно будеть занимать по 5-10 секунд на SE K-700, что не есть good. :(

Dr.SanX 11.11.2008 14:32

Ответ: Чтение произвольной строки из ресурса
 
Цитата:

Дык это ж зверски торомозно!
Ну что поделаешь.
Цитата:

В ресурсном txt-файле более 1000 строк.
есть и другой способ создай для каждой строки свой файл ))

Phantom 11.11.2008 23:05

Ответ: Чтение произвольной строки из ресурса
 
О_о Рано я спасибку поставил =) Я думал, что там как раз считывается с определённого места, не посмотрел сразу.

Cliffe Snake 14.11.2008 04:36

Ответ: Чтение произвольной строки из ресурса
 
Skythrone, мой тебе совет: раздели все свои интерфейсные команды на группы, а каждую группу храни в отдельном файле. :)

Rosetau 20.11.2008 00:42

Ответ: Чтение произвольной строки из ресурса
 
Цитата:

потом через Lib_res загружаю в него данные построчно
не могли бы вы ее выложить тут, не смог найти

Skythrone 20.11.2008 16:36

Ответ: Чтение произвольной строки из ресурса
 
Господа гуру, не могли бы вы реализовать возможность чтения из ресурса с произвольной позиции (оффсета) и заданной длины?

2Rosetau: старую версию либы я выложу завтра, сейчас я в командировке

Shara 28.11.2008 04:02

Ответ: Чтение произвольной строки из ресурса
 
Вложений: 1
Доброго времени суток форумчанам.
Как тут не однократно говорили - стандартными средствами - тормозит, а библиотеку сделать не выйдет.

сейчас использую вот такую функцию для чтения нужной строки:
Код:

function textread(a:integer; data:string): string;
var
loopIndex:integer;
begin
 text:=openResource('/'+data);
    for loopIndex := 0 to a do
    begin
      textread:=readLine(text);
    end; 
  closeResource(text);
end;

конечно же каждый раз перебирать весь файл - бред собачий. Но максимально что получилось вытянуть - использовать файлы с небольшим количеством строк и при загрузке загонять в массив строк, однако чтение ~ 70 строчного файла на SE500 занимает ~6-10секунд! Так ладно - загрузили и забыли, но при переключении на другой файл во время работы приложения это недопустимо.

Вот вы говорите что нельзя такую либу написать. Но меня тогда гложет любопытство, каким образом работают java книги? (я буду ставить в пример Tequila cat book reader) Мощная читалка и держит файлы ЛЮБОГО размера (свыше 6000 строк точно), использует графические шрифты, моментально грузит файл (до 5ти сек, а то и меньше на SE500) и никаких тормозов и подгрузок. абсолютно никаких. во время использования нет.

Я взял скомпилированный мидлет и попытался распаковать самый "выпяченный" класс (BookReaderMidlet.class) - результат довольно интересен (см вложение). Если даже чтение определённых строк не реализуемо, то "быстрое" чтение реализуемо вполне. Вопрос как. Прошу поделиться вашими соображениями на этот счёт и надеюсь на помощь. :)


ADD.
Похоже используется вот этот метод, но на первый взгляд мало чем отличается. тот же перебор.
Код:

import java.io.*;
import java.awt.*;
import java.applet.*;

public class Read extends Applet {

  TextArea ta = new TextArea();

  public void init() {
    setLayout(new BorderLayout());
    add(ta, BorderLayout.CENTER);
    try {
      InputStream in =
        getClass().getResourceAsStream("read.txt");
      InputStreamReader isr =
        new InputStreamReader(in);
      BufferedReader br =
        new BufferedReader(isr);
      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      String line;
      while ((line = br.readLine()) != null) {
        pw.println(line);
      }
      ta.setText(sw.toString());
    } catch (IOException io) {
      ta.setText("Ooops");
    }
  }
}


Shara 02.12.2008 14:57

Ответ: Чтение произвольной строки из ресурса
 
оптимизировал всё что только смог. теперь 2 сек 50строк. на сейчас пойдёт, но вообще - не дело это...


Часовой пояс GMT +4, время: 19:40.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot