Разбор html-комментариев с использованием функции разделения Perl

Я вижу, что в документации для CursorAdapter указано:

Курсор должен содержать столбец с именем _id или этот класс не будет работать.

SimpleCursorAdapter является производным классом, поэтому представляется, что это утверждение применяется. Однако заявление технически неверно и несколько вводит в заблуждение новичка. Набор результатов для курсора должен содержать _id, а не сам курсор. Я уверен, что это понятно для администратора баз данных, потому что эта краткая документация им понятна, но для этих новичков, будучи неполным в заявлении, вызывает путаницу. Курсоры подобны итераторам или указателям, они не содержат ничего, кроме механизма трансверсации данных, они не содержат самих столбцов.

Документация Loaders содержит пример, где можно видеть, что _id включен в параметр проекции.

static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
    Contacts._ID,
    Contacts.DISPLAY_NAME,
    Contacts.CONTACT_STATUS,
    Contacts.CONTACT_PRESENCE,
    Contacts.PHOTO_ID,
    Contacts.LOOKUP_KEY,
};
public Loader onCreateLoader(int id, Bundle args) {
    // ...
    return new CursorLoader(getActivity(), baseUri,
            CONTACTS_SUMMARY_PROJECTION, select, null,
            Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
}

-1
задан Raznok 3 March 2019 в 19:48
поделиться

1 ответ

Поскольку вы сказали, что анализируете документ .txt (со встроенными комментариями HTML), вы можете попробовать Regexp::Grammars . Вот отправная точка:

use strict;
use warnings;
use Regexp::Grammars;

my $parser = qr{   
          <nocontext:>
          <words>
          <token: words> (?:(?:<[word]><[separator]>?)|(?:<[separator]><[word]>?))+
          <token: word> <.wordchar>+
          <token: separator> <.comment> | (?:(?:(?!<.comment>)(?!<.wordchar>)).)+
          <token: wordchar> [a-zA-Z]
          <token: comment> \< <.wordchar>+ \> [^<]* \</\>
}sx;

my $fn = 'file.txt';
open ( my $fh, '<', $fn ) or die "Could not open file '$fn': $!";
my $text = do { local $/; <$fh> };
close $fh;

if ($text =~ $parser) {
    for my $word (@{ $/{words}{word} } ) {
        print "'", $word, "'\n";
    }
}
0
ответ дан Håkon Hægland 3 March 2019 в 19:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: