Поиск:

Закрытая темаСоздание новой темы Создание опроса
> прочитать определенные данные из файла 
V
    Опции темы
gordmiand
Дата 5.6.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



есть некий файл - см.рисунок...надо считать в массив выделенный красным столбец данных....

я делаю так:
Код


int Nzap=1;
char sim=0;



potdan=fopen("C:\\f1.RegData","r");


   fseek(potdan,544, SEEK_SET);        // начальное смещение по файлу



 for (int t=1; t<=800; t++)
{

  if (t==1) fseek(potdan,9, SEEK_CUR);      //  пропуск первых 9 байт в первой считываемой строке

    sim=' ';

      fscanf(potdan,"%c",&sim);

        s1->Cells[0][Nzap-1]=IntToHex((int)(unsigned char)sim,2);  // вывод данных

    fseek(potdan,15, SEEK_CUR); // перемещение к след. символу в t+1 строке 

    Nzap++;

}

fclose(potdan);



поначалу все правильно записывается, но начиная со 183-го значения записываются непонятные данные, хотя весь столбец данных - FF 00 FF 00 FF 00 и так до конца файла....
в чем ошибка?











Это сообщение отредактировал(а) gordmiand - 5.6.2009, 20:35

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  ris.JPG 231,99 Kb
PM MAIL   Вверх
gordmiand
Дата 5.6.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



лююююююююююди.......help please...очень надо....вроде по логике и программе все верно, но есть такой вот сбой....что это может быть?????
PM MAIL   Вверх
dumb
Дата 6.6.2009, 04:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



Цитата(gordmiand @  5.6.2009,  21:33 Найти цитируемый пост)
fopen("C:\\f1.RegData","r")

rb

Цитата(gordmiand @  5.6.2009,  21:33 Найти цитируемый пост)
Код
 for (int t=1; t<=800; t++)
{
  if (t==1)

шедеврально
PM MAIL   Вверх
gordmiand
  Дата 6.6.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



dumb: a что не так и в чем ошибка? я и так и сяк крутил, а итог один....все равно неверно выводится информация из файла...

Это сообщение отредактировал(а) gordmiand - 6.6.2009, 19:24
PM MAIL   Вверх
Dmi3ev
Дата 6.6.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



а зачем? если значения чередуются... то FF, то 00...


--------------------

PM MAIL   Вверх
EEEEEE
Дата 6.6.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



Из серии по умничать...

Так может и искать только пару символов FF + ... и не мучиться со счётом?
PM MAIL   Вверх
Dmi3ev
Дата 6.6.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



а если все же делать, то я бы делал так, считывал бы строку из файла, а потом выделял бы два символа начиная с пизиции Х (лень было определять какая она там по счету)...


--------------------

PM MAIL   Вверх
gordmiand
Дата 6.6.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



вы не поняли...просто это только в данном считываемом столбце значения таким образом чередуются...я по данному столбцу (для простоты) стал проверять правильность всех считываемых данных и обнаружил такую ошибку (после 183-го значения чтение из файла и запись данных идет неверная...)...вот в чем вопрос...то есть почему-то запись данных через какое-то время начинает "сбиваться"...может какое-то переполнение или еще что-то такое...
PM MAIL   Вверх
gordmiand
Дата 6.6.2009, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



посмотрите пожалуйста архив (прога+файл-источник данных)....

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  proga.rar 55,14 Kb
PM MAIL   Вверх
gordmiand
Дата 7.6.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



люююююди....ну посмотрите, пожалуйста, предыдущее сообщение.....ооочень надо...наверняка ошибка примитивная... 
PM MAIL   Вверх
AngelDominantes
Дата 7.6.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 29.5.2009

Репутация: нет
Всего: нет



Хым проверь файлик свой может в нем что не так, может меняется колличество символов после 183 строки?!

И потом поступи как тебе тут посоветовали: считывай строку в какой нибудь буфер и выделяй уже из нее нужные тебе элементы! так будет правильнее чем со смещением ипацца)
PM MAIL   Вверх
gordmiand
Дата 7.6.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



подскажите пож-та (код) как обрабатывать таким образом текст - у меня он идет 16 символов (по крайней мере должно так быть) - т.е. 16 байт в каждой строке и мне нужно записать в массив, например, каждый 5-ый байт (код пятого символа) из каждой строки текста...
PM MAIL   Вверх
gordmiand
Дата 8.6.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



как скачивать всю строку текста целиком (%s не работает), как узнать ее конец (если считывать из строки посимвольно(%c)), а также каким образом осуществляется переход на новую строку (
Код
fscanf("\n",NULL)

)  для последующей ее загрузки в буфер-массив???

Это сообщение отредактировал(а) gordmiand - 8.6.2009, 00:12
PM MAIL   Вверх
mrbrooks
Дата 8.6.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



gordmiand, в С++ есть свой потоковый файловый ввод/вывод - я бы использовал его на подобии этого. Делал под консоль но переделать под гуй проблем вызвать не должно.

Код

#include <iostream>
#include <ifstream>

std::ifstream file(("f1.RegData",std::ios::binary);
unsigned char ch;
int pos = 553; 
while(!file.eof())
{
  file.seekg(i, std::ios::beg);
  file >> ch;
  pos += 16;
  if (!file.eof()) std::cout << std::hex << "0x" << (int)ch << std::endl;
}


Напомню. В VCL есть врапер позволяющий работать аналогично с бинарными файлами - TFileStream
PM MAIL   Вверх
gordmiand
Дата 8.6.2009, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



как все сложно...наверняка можно попроще все это сделать...

а вообще - можно такую задачку (записать в массив, например, коды первых символов каждой строки текста в ее 16ричной записи) решить, работая с символами? так как в 16ричной записи текста идет сортировка исходного текста в строки по 16 байт (16 символов в строке) - см. рисунок - сравнение справа и нижний исходный текст... если можно, то подскажите самый ппостой вариант применительно к GUI, VCL...

Код

FILE *potdan;
   char st;


 potdan=fopen("C:\\pr.txt","r");


 for (int f=1; f<=10; f++)
{
     fscanf(potdan,"%c",&st);            - считывание первого символа в строке....
     s1->Cells[0][f-1]=IntToHex((int)(unsigned char)st,2);
     fseek(potdan, 15, SEEK_CUR);    - пропуск оставшихся 15 (???) байт в тек. строке 
}

fclose(potdan);

   

или просто - подскажите как программно считывать из файла только каждый пятый (например) символ из каждой строки текстового файла с учетом того, что каждая строка файла имеет произвольную длину и пробелы в тексте (в каждой строке по 16 байт (по идее...)).... 


Это сообщение отредактировал(а) gordmiand - 8.6.2009, 19:44

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  risunok.JPG 68,14 Kb
PM MAIL   Вверх
Dmi3ev
Дата 8.6.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



я бы делал так
Код

//...
        char s[256];//сюда будем читать строки из файла по очереди
        ifstream fi("D:\\1.txt");//окрыли файл (можно добавить проверку, открылся он или нет, это уже не суть важно)
        while(!fi.eof())//пока не конец файла
        {
                fi.getline(s, 256);//читаем строку
                cout<<s[5];//выводим пятый символ строки
        }
//...
        fi.close();//закрыли поток, больше он не нужен, при выходе из функции в принципе это сделается автоматически вроде...
//...




--------------------

PM MAIL   Вверх
gordmiand
Дата 8.6.2009, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Dmi3ev: 1) а что за функция ifstream? у меня пишет ошибку (неизв. символ ifstream) - и неужели    
                  нельзя  это сделать обычным fread или т.п. (как именно?)?
              2) куда идет вывод символа ф-ей соut?
              3) почему размер строки=256 (я ж ее не знаю точно) 
PM MAIL   Вверх
Dmi3ev
Дата 8.6.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

1) а что за функция ifstream? у меня пишет ошибку (неизв. символ ifstream) - и неужели    

надо подключить заголовок
Код

#include <fstream.h>

Цитата

 2) куда идет вывод символа ф-ей соut?

ну это типа я изобразил просто вывод, это консоль типа.
я прям тут писал...
я просто саму суть пытался донести, а не сделать программу...
ты выводи куда тебе надо...
Цитата

3) почему размер строки=256 (я ж ее не знаю точно)  

ну это типа максимальный (строка может быть и меньше), больше 256 символов в строке в твоем файле точно нет... если есть, то задай больше...
Цитата

 нельзя  это сделать обычным fread или т.п. (как именно?)

можно делай, я просто показал, как бы я сделал...


--------------------

PM MAIL   Вверх
gordmiand
Дата 8.6.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



ответ получается неверным....почему-то из первой строки берет нужный (хочу первый) код символа, а из следующих строк - нет (вроде со смещением...)????

см. прилагаемый архив - красным выделен верный ответ (хочу считать коды первых символов из строк кодов (а не текстовых строк)- выделены красным)


тут наверное надо не символами(строками) оперировать, а смещением по всему тексту на определенное число байт, так как текст не сохраняется в его изначальном виде, а строки компонуются по 16 символов(???), т.е. 16 байт в строке (см. рис.)...а вы этого не учитывали наверное...как тогда быть?

Это сообщение отредактировал(а) gordmiand - 8.6.2009, 23:06

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  progr.rar 125,83 Kb
PM MAIL   Вверх
gordmiand
Дата 8.6.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



и почему же неправилен код (тоже происходит смещение кодов под конец  - см. по рисунку верный ответ), который закомментирован в программе из архивника предыдущего сообщения?
(видать не в каждой строке по 16 байт? но судя по рисунку (см. справа) в каждой строке вроде по 16 разного рода символов...и в каждой строке по 16 кодов символов - тогда что тут не так?)
PM MAIL   Вверх
dumb
Дата 8.6.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



gordmiand, будь добр, прочитай внимательно мой первый пост в этой теме. обрати особое внимание на первую его половину, и на то, что там отмечено красным цветом.
PM MAIL   Вверх
Dmi3ev
Дата 8.6.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



а так у него бинарник... я просто архивчик не смотрел... тогда слушай dumb-а... или делай как я сказал, только не
Цитата

ifstream fi("D:\\1.txt");

а 
Код

ifstream fi;
fi.open("D:\\1.txt", ios::binary)

вот...


--------------------

PM MAIL   Вверх
gordmiand
Дата 9.6.2009, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



dumb: то есть вместо ключа "r" использовать "rb"?


Dmi3ev: что такое ios?
PM MAIL   Вверх
mrbrooks
Дата 9.6.2009, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(gordmiand @  8.6.2009,  19:41 Найти цитируемый пост)
как все сложно...наверняка можно попроще все это сделать...

в чем сложность? я же написал - что это стандартный файловый ввод-вывод С++. 

Цитата(Dmi3ev @  8.6.2009,  19:54 Найти цитируемый пост)
я бы делал так

а я бы нет  smile 
уж если и считывать буфер - то по 16 байт и выделять каждый пятый. Но это смотрится не особо кошерно, когда можно просто перемешать курсор по файлу и считывать всего один нужный байт.

Добавлено через 1 минуту и 4 секунды
Кстати то пятый байт, то девятый. Автор не постоянен  smile 
PM MAIL   Вверх
Dmi3ev
Дата 9.6.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



mrbrooks, тут похоже надо весь файл читать, просто автор об этом смутно говорит...
Тем более я предлагал тогда, когда не знал, что это бинарник...

Добавлено через 3 минуты и 8 секунд
Цитата

Dmi3ev: что такое ios? 

это можно узнать в интернете
Цитата

dumb: то есть вместо ключа "r" использовать "rb"?

вот туго доходит... ДААААААААААААААААААААА...
dumb, уже очень-очень-очень намекнул, что нужно сделать  smile 


--------------------

PM MAIL   Вверх
gordmiand
Дата 9.6.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



фуууууууууф.....вопрос решил...ну надо же - одна буква ("b" в fscanf) и всееееее.....а выделенный символ я и не заметил в первом сообщении dumb-a....
всем спасибо....

Добавлено @ 21:59
подскажите еще пож-та как задать двумерный массив жел-но типа Int размером [> 100000][5]?

Это сообщение отредактировал(а) gordmiand - 9.6.2009, 22:00
PM MAIL   Вверх
dumb
Дата 10.6.2009, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



gordmiand, если бы ты прочитал правила форума, то увидел бы там п.10 - "Один топик - один вопрос".

Модератор: тема закрывается, а gordmiand пытается сконцентрироваться, чтобы четко прописать суть вопроса(п.1 правил, ага) в тему нового топика. а еще лучше последовать рекомендации из п.12.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.