Member 14161770 Ответов: 3

Проблема преобразования файлов


Используя 3 модуля, мы создаем 3 файла, скажем a,b и c.

а имеет такие данные как
номер товара, количество заказанных товаров, количество поврежденных товаров, количество товаров в наличии, на удержании и т. д
a считывает упомянутые выше поля из базы данных и копирует их в массив символов. Теперь этот массив символов записывается в конечный файл - проблема здесь в том, что я могу печатать и
смотрите, как каждое поле приходит правильно, но когда оно копируется в массив символов,например :memcpy (&buffer[62], &field_name, sizeof(int)); : массив символов, буфер, если я печатаю,
показывает значение в каком-то другом формате. То же самое значение записывается в файл а, и файл также находится в некотором другом формате.
Он не имеет расширения (файл а) . Если я даю команду file, чтобы узнать, что это за файл, он показывает: данные или текст на международном языке.



Б имеет такие данные как
далее Нум, Нум каст, магазин Нум, доклад и т. д. ID
тот же метод, описанный выше для файла а, происходит и здесь
c имеет такие данные, как
не выделено кол-во, кол-во ДСН и т. д.
тот же метод, описанный выше для файла а, происходит и здесь


Если мне нужно узнать, как окончательный файл содержит-ve val, я должен сначала узнать, что содержит этот массив символов
окончательный модуль создает файл в режиме записи и копирует содержимое 3 файлов следующим образом :
функции sprintf ("Буфф", "кот в %S &ГТ;&ГТ; %ы",
file_a/file_b/file_c, final_file);

окончательный файл, как уже упоминалось, создается и открывается в режиме записи.
Окончательный файл также находится в двоичном формате ormat или что-то в этом роде, поэтому у нас есть созданная утилита
чтобы прочитать содержимое файла
теперь вот возникает проблема, что этот последний файл, когда я открываю и пытаюсь прочитать с помощью
утилита показывает, прочитайте эти пять значений

Что я уже пробовал:

Я попытался сохранить немного меньше записей в исходных входных файлах и в режиме отладки попытался распечатать значения. Но я не нашел никакой ценности, приходящей-ve.

Richard MacCutchan

Посмотрите на код, который выполняет слияние. Я могу только предположить, что вы пишете данные в неправильном формате.

3 Ответов

Рейтинг:
20

OriginalGriff

Мы не можем сказать, "в каком формате" это происходит: мы понятия не имеем, какими должны быть данные или как они генерируются.

Итак, вам нужно начать с приложения, которое генерирует "окончательный файл", и использовать отладчик teh, чтобы посмотреть на четыре вещи:
1) входные значения, которые он фактически использует. Не значения в файлах "a, b и c" или значения в БД, а фактические значения, которые приложение использует для создания файла "d".
2) как он объединяет эти значения для создания файла.
3) выходные значения, которые он фактически генерирует. Это, вероятно, означает использование шестнадцатеричного редактора для просмотра данных в виде байтовых / двоичных значений, а не символьных. (Я использую PSPad[^] - это хороший текстовый редактор для общих разработчиков и хорошо работает с двоичными файлами - это бесплатная программа). Текстовые редакторы, такие как блокнот, здесь не помогают, поскольку они интерпретируют некоторые значения как управляющие символы или как "невидимые" значения.
4) выходные значения, которые вы ожидаете, что "d" будет содержать.

Мы не видим ничего из этого: у нас нет доступа к вашим входным данным, БД или файлам "a, b и c"; нет доступа к вашему исходному коду; нет доступа к вашим выходным данным; нет представления о том, что вы ожидали.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей компиляторной системы, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Цитата:
1) входные значения, которые он фактически использует. Не значения в файлах "a, b и c" или значения в БД, а фактические значения, которые приложение использует для создания файла "d".- Я пытался выяснить это, но потерпел неудачу, так как файл conatians values, как я уже упоминал выше
2) как он объединяет эти значения для создания файла. - используемая команда :sprintf (buff, "cat %s >> %s",
file_a, file_d);
3) выходные значения, которые он фактически генерирует.
4) выходные значения, которые вы ожидаете, что "d" будет содержать.
3 & 4 - некоторые из них верны, и файлы приходят-ve случайным образом


:вздыхать:
1) если вы не знаете, какие ценности вы используете - и если вы не можете сказать мне, то вы не знаете - тогда вы не можете сказать "это здесь" вообще. Вам нужно найти информацию (потому что мы не можем до нее добраться!), начиная с источника и прорабатывая свой путь, поскольку проблема может возникнуть в любой момент.
2) это не создает файл. Он генерирует строку внутри массива символов внутри вашего приложения.
#include <stdio.h>

int main()
{
    printf("Hello World\n");
    char buff[100];
    char *file_a = "hello";
    char *file_d = "world";
    sprintf (buff, "cat %s >> %s", file_a, file_d); 
    printf("%s\n", buff);
    return 0;
}
Покажу это:
Hello World                                                                                        
cat hello >> world
Там нет ничего, что генерирует файлы!
Даже если вы выполните эту строку как системную команду, она не будет делать ничего особенно полезного, если входной файл_a содержит двоичные данные в виде cat рассматривает его как текст!
3) а они есть?
4) должен ли я угадать, чего вы ожидаете?

Послушайте, у вас есть отладчик - я чертовски уверен, что у вас есть, и даже если вы не знаете, как его использовать, Google делает это - и это инструмент, который вам нужно использовать, чтобы точно узнать, что происходит!
Мы не можем решить ваши проблемы без реальной информации, к которой у вас есть доступ, а у нас нет.

На данный момент ваша машина сломалась в середине нигде.
Вы позвонили в гараж - мне - и сказали: "это не работает!"
Когда я спрашиваю, что это за машина, что с ней случилось, какая деталь не работает, где вы - все, что нужно знать гаражу, чтобы прийти и починить вашу машину, - вы описываете свой брелок: "Ну, он черный и сделан из пластика. На нем две пуговицы, и я повесила на них ключи от дома". Это не поможет механику, и ваши ответы не помогут мне.

Помогите нам помочь вам!


Member 14161770

1) входные значения, которые он фактически использует. Не значения в файлах "a, b и c" или значения в БД, а фактические значения, которые приложение использует для создания файла "d".- Я пытался выяснить это, но потерпел неудачу, так как файл conatians values, как я уже упоминал выше
2) как он объединяет эти значения для создания файла. - используемая команда :sprintf (buff, "cat %s >> %s",
file_a, file_d);
3) выходные значения, которые он фактически генерирует.
4) выходные значения, которые вы ожидаете, что "d" будет содержать.
3 & 4 - некоторые из них верны, и файлы приходят-ve случайным образом

OriginalGriff

Ответ обновлен.

Рейтинг:
0

Patrice T

Итак, вы не понимаете, как вы получаете этот результат, вы только забыли сказать нам, какие входные данные у вас есть и какой код вы используете для слияния входных данных.
Мы не АНБ, мы не можем видеть ваш экран, или получить доступ к вашему HDD, мы не можем читать ваши мысли либо.

Задавать вопросы-это навык[^]
Некоторые рекомендации по размещению вопросов на форумах[^]


TheRealSteveJudge

Действительно, хороший ответ на плохой вопрос. 5*

Patrice T

Спасибо.
Как вы можете видеть, некоторые люди не любят :)

CPallini

У меня 5.

Patrice T

Спасибо

Рейтинг:
0

KarstenK

Это двоичные файлы. Когда вы говорите, что они объединены, я думаю, что это дерьмо (случайные данные).

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

Обычно это расширение представляет собой четкое описание формата файла.