Разбор текстового файла для шестнадцатеричного содержимого - PullRequest
1 голос
/ 26 августа 2010

У меня есть этот текстовый файл, который содержит приблизительно 22 000 строк, каждая строка выглядит следующим образом:

12A4 (Text)

Таким образом, он имеет формат 4 буквы / числа (шестнадцатеричный)а затем текст.Иногда в тексте содержится несколько значений, разделенных запятой: A34d (Text, Optional)

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

Ответы [ 6 ]

5 голосов
/ 26 августа 2010

Пример использования подстроки и разбиения.

        string value = "A34d (Text, Optional)";

        string hex = value.Substring(0, 4);
        string text = value.Split('(')[1];

        if (text.Contains(','))
            text = text.Substring(0, text.IndexOf(','));
        else
            text = text.Substring(0, text.Length-1);

Для поиска используйте словарь.

3 голосов
/ 26 августа 2010

Это, вероятно, <2 МБ данных. </p>

Я думаю, что вы можете:

  1. Прочитать весь файл
  2. Разделить каждую строку по ключу (шестнадцатеричное число) и значению (оставшиеся) Крис Персикетти Ответ отлично подходит для этого
  3. Сохранить каждую строку в словаре (используя число как int, так и как строку)

    d = Dictionary<int,string>
    d.put( int.Perse( key ), value );
    
  4. Сохраните этот словарь в памяти, а затем выполните очень быстрый поиск по идентификатору

2 голосов
/ 26 августа 2010

Уже опубликованы элегантные ответы, но, поскольку вы запросили регулярное выражение, попробуйте следующее:

var regex = @"^(?<hexData>.{4}\s(?<textData>.*)$)";
var matches = Regex.Matches
              (textInput, regex, RegexOptions.IgnoreWhiteSpace 
               | RegexOptions.Singleline);

затем вы анализируете объект совпадений, чтобы получить все, что вы хотите.

1 голос
/ 26 августа 2010

Если вы хотите искать значение Hex более одного раза, вы определенно хотите сохранить его в справочной таблице.

Это может быть так же просто, как Dictionary<string, string>, которое вы заполняетесодержимое вашего файла при запуске:

  • прочитать каждую строку (StreamReader.ReadLine)
  • hexString = подстрока первых 4 символов в строке
  • сохранить остальныестрока

Чтобы найти первую часть, создайте функцию, которая извлекает "A" из "(A, B, C, ...)"

Если вы можете исключитьзапятые "," в "A", вам повезло: удалите скобки, разделите на "," и верните первую подстроку.

1 голос
/ 26 августа 2010

Используйте StreamReader для ReadLine, и затем вы можете проверить, совпадают ли первые символы с тем, что вы ищете, и если это так, вы можете сделать

string yourresult = thereadline.Split
                    (new string[]{" (",","}, 
                     StringSplitOptions.RemoveEmptyEntries)[1]
1 голос
/ 26 августа 2010
var lines = ...;

var item = (from line in lines
            where line.StartsWith("a34d", StringComparison.OrdinalIgnoreCase)
            select line).FirstOrDefault();

//if item == null, it is not found

var firstText = item.Split('(',',',')')[1];

Это работает, и если вы хотите убрать начальные и конечные пробелы из firstText, добавьте .Trim() в конце.

Чтобы разбить текст на несколько строк, смотрите мои два ответа здесь. Как мне преобразовать строку с символами новой строки в нее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...