Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 записи в dbf  [new]
vlad2018
Member

Откуда:
Сообщений: 100
Подскажите кто сталкивался, при записи данных в dbf файл поля типа number со значением 45,7 записывается как 48!!
Почему так получается?? И можно ли это обойти? Для формирования файла использую библиотеку javadbf.
Буду благодарен за любой совет!
4 янв 19, 18:47    [21778509]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
d7i
Member

Откуда:
Сообщений: 462
Из спецификации javadbf (первая попавшаяся в интернете):
NUMERIC ('N', 1, 32, 0, true)
Вроде бы 45.7 не помещается...

Возможно это про другую библиотеку.
См. сами тщательно спецификацию вашей библиотека.
5 янв 19, 16:53    [21778783]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
vlad2018
Member

Откуда:
Сообщений: 100
d7i
Из спецификации javadbf (первая попавшаяся в интернете):
NUMERIC ('N', 1, 32, 0, true)
Вроде бы 45.7 не помещается...

Возможно это про другую библиотеку.
См. сами тщательно спецификацию вашей библиотека.


Я столкнулся со следующей проблемой, у меня есть две колонки с типом number, в одной хранится значение 45.5, а в другой 45, но при записи в дбф файл записывается 45 и 45, а 45 и 45.5, когда я указываю разделитель 2 знака после запятой, то он применяется на обе колонки а не одну
8 янв 19, 14:15    [21779868]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
faustgreen
Member

Откуда:
Сообщений: 338
vlad2018, Вроде все норм работает:
package test;

import com.linuxense.javadbf.*;
import java.io.*;

public class DBFWriterTest {

  public static void main( String args[])
  throws DBFException, IOException {

    // let us create field definitions first
    // we will go for 3 fields
    //
    DBFField fields[] = new DBFField[3];

    fields[0] = new DBFField();
    fields[0].setName( "emp_code");
    fields[0].setDataType( DBFField.FIELD_TYPE_C);
    fields[0].setFieldLength( 10);

    fields[1] = new DBFField();
    fields[1].setName( "emp_name");
    fields[1].setDataType( DBFField.FIELD_TYPE_C);
    fields[1].setFieldLength( 20);

    fields[2] = new DBFField();
    fields[2].setName( "salary");
    fields[2].setDataType( DBFField.FIELD_TYPE_N);
    fields[2].setFieldLength( 12);
    fields[2].setDecimalCount( 2);

    DBFWriter writer = new DBFWriter();
    writer.setFields( fields);

    // now populate DBFWriter
    //

    Object rowData[] = new Object[3];
    rowData[0] = "1000";
    rowData[1] = "John";
    rowData[2] = new Double(45.00);

    writer.addRecord( rowData);

    rowData = new Object[3];
    rowData[0] = "1001";
    rowData[1] = "Lalit";
    rowData[2] = new Double(45.70);

    writer.addRecord( rowData);

    rowData = new Object[3];
    rowData[0] = "1002";
    rowData[1] = "Rohit";
    rowData[2] = new Double( 45.50);

    writer.addRecord( rowData);

    FileOutputStream fos = new FileOutputStream(args[0]);
    writer.write( fos);
    fos.close();
  }
}


Ссылка на пример - ftp://priede.bf.lu.lv/pub/DatuBazes/DBF/javadbf/javadbf-tutorial.html

К сообщению приложен файл. Размер - 6Kb
13 янв 19, 01:12    [21783886]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
faustgreen
Member

Откуда:
Сообщений: 338
Дозапись в существующий файл тоже работает:
package test;

import com.linuxense.javadbf.*;
import java.io.*;

public class DBFWriterTest {

  public static void main( String args[])
  throws DBFException, IOException {

    // let us create field definitions first
    // we will go for 3 fields
    //
    DBFField fields[] = new DBFField[4];

    fields[0] = new DBFField();
    fields[0].setName( "emp_code");
    fields[0].setDataType( DBFField.FIELD_TYPE_C);
    fields[0].setFieldLength( 10);

    fields[1] = new DBFField();
    fields[1].setName( "emp_name");
    fields[1].setDataType( DBFField.FIELD_TYPE_C);
    fields[1].setFieldLength( 20);

    fields[2] = new DBFField();
    fields[2].setName("salary");
    fields[2].setDataType( DBFField.FIELD_TYPE_N);
    fields[2].setFieldLength(12);
    fields[2].setDecimalCount(2);

    fields[3] = new DBFField();
    fields[3].setName( "ert");
    fields[3].setDataType(DBFField.FIELD_TYPE_N);
    fields[3].setFieldLength(12);
    fields[3].setDecimalCount(0);
    
    DBFWriter writer = new DBFWriter(new File(args[0]));
   // writer.setFields( fields);

    // now populate DBFWriter
    //

    Object rowData[] = new Object[4];
    rowData[0] = "1000";
    rowData[1] = "John";
    rowData[2] = new Double(45.00);
    rowData[3] = new Double(45.00);

    writer.addRecord( rowData);

    rowData = new Object[4];
    rowData[0] = "1001";
    rowData[1] = "Lalit";
    rowData[2] = new Double(45.70);
    rowData[3] = new Double(45.00);

    writer.addRecord( rowData);

    rowData = new Object[4];
    rowData[0] = "1002";
    rowData[1] = "Rohit";
    rowData[2] = new Double( 45.55);
    rowData[3] = new Double(45.00);

    writer.addRecord(rowData);

    //FileOutputStream fos = new FileOutputStream(args[0]);
    writer.write();
    //fos.close();
  }
}


К сообщению приложен файл. Размер - 13Kb
13 янв 19, 01:47    [21783890]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
faustgreen
Member

Откуда:
Сообщений: 338
Библиотека, из примера.

К сообщению приложен файл (com.linuxense-1.0.jar - 13Kb) cкачать
13 янв 19, 01:50    [21783891]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
Garrick
Member

Откуда: Москва
Сообщений: 2957
vlad2018
Я столкнулся со следующей проблемой, у меня есть две колонки с типом number, в одной хранится значение 45.5, а в другой 45, но при записи в дбф файл записывается 45 и 45, а 45 и 45.5, когда я указываю разделитель 2 знака после запятой, то он применяется на обе колонки а не одну

На лицо кривизна реализации библиотеки или её использования. Попробуйте какую-нибудь другую или напишите сами, или внимательней изучите инструкцию/исходники. По сути сам DBF файл- это простой текстовый файл, форматы можно найти в интернете, даже в Википедии есть. Трудности могут начаться при использовании индексов, особенно если необходима совместимость с существующей системой.
14 янв 19, 11:17    [21784562]     Ответить | Цитировать Сообщить модератору
 Re: записи в dbf  [new]
mayton
Member

Откуда: loopback
Сообщений: 42981
Я советую автору взять Hex-редактор и открыть в нем dbf-файл и найти глазами константы 45,7 или 48.

По результату можно будет говорить что дальше. Иначе мы обсуждаем не dbf а погрешности в реализции
разных dbf-драйверов и приложений.
14 янв 19, 12:28    [21784622]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить