grep + excel Как эксель сохраняет числа в ячейке General?

12345

Хочу найти с помощью этой команды какое-то число, встречающееся в фале.
Если число сохранено как текст, то ищет нормально, а если тип ячейки General, то не ищет.
Вообщем возможно ли узнать, что данное число находится в этом файле?

mkrec

я не доктор, но не пробовали ли вы искать в файле число в том виде, в котором принято хранить числа в памяти компа?

Tatiana09

Хранит он их как-то очень хитро. Короче, либо ищи эту инфу в нете, либо вооружайся TotalComander'ом для сравнения двух файлов в hex-формате и калькулятором hexit (http://www.wfwsoftware.com/) для пересчета чисел между типами (или воспользуйся online калькулятором: http://babbage.cs.qc.edu/IEEE-754/Decimal.html).
Алгоритм следующий: сохраняешь файл Excel с одним единственным листом и одной единственной непустой ячейкой, в которой выставляешь тип "Общий". Вбиваешь в эту ячейку число, например 35, сохраняешься под именем "Книга1.xls". Вбиваешь другое число, например 36, сохраняешь как "Книга2.xls". сравниваешь два файла в Тотале, находишь, где у тебя хранится содержимое этой ячейки. У меня это оказалось по смещению 0A38. Далее, меняя чиселку в экселе и сохраняя файл, смотришь, как Excel хранит разные числа.
Вот тебе небольшая подсказка, которую я обнаружил:
Число 35 он хранит в виде 00 00 80 41 40, где первые два байта - это хз что, а три последних - последние три байта числа 35 в формате Double Real с обратным порядком байтов (35 = 00 00 00 00 00 80 41 40).
Число 35,1 он хранит в виде 00 01 6C AB 40, где хз что равно 01, а само число он записал как 3510 (3510 = 00 00 00 00 00 6C AB 40)
Число 35,11 он хранит в виде 00 01 6E AB 40, где хз опять 01, а само число равно 3511 (3511 = 00 00 00 00 00 6E AB 40)
Число 35,111 он уже записывает в полноценном Double Real с обратным порядком байтов (35,111 = 91 ED 7C 3F 35 8E 41 40).
То есть, у него есть как минимум три типа хранения чисел - для небольших целых он записывает только их три значащих байта, для чисел побольше и чисел с небольшим количеством знаков после запятой - второй, экспоненциальный формат, а для тех чисел, что не влезают во второй формат - честно записывает их в Double Real с обратным порядком байтов.
P.S. Сильно не пинать, я не программер, просто поковырялся в файлах и попытался найти хоть какую-нибудь закономерность.
P.P.S. Если не в курсе про машинное представление чисел, советую начать читать здесь: http://en.wikipedia.org/wiki/IEEE_754

kruzer25

и чисел с небольшим количеством знаков после запятой
Я бы даже сказал, с не более чем двумя знаками после запятой, причём, такие числа приводятся к двум знакам после запятой, судя по твоему посту.
У меня такое ощущение, что это деньги.

Tatiana09

Хинт: может стоит сохранить твой экселевский файл как .csv и искать в нем? Потому что в csv все числа хранятся в обычном текстовом формате.

12345

Ну ты просто хакер, завтра почитаю про машинный код.
ЗЫ не деньги, целые числа, идентификаторы своеобразные.
Оставить комментарий
Имя или ник:
Комментарий: