Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem reading Float #24

Open
paoloromani opened this issue May 5, 2016 · 7 comments
Open

Problem reading Float #24

paoloromani opened this issue May 5, 2016 · 7 comments

Comments

@paoloromani
Copy link

I have some problem reading float fields.
getFieldsStringRepresentation return all fields but toMap does not display the value

meta.getFieldsStringRepresentation() = TARGET_FID,N,9,0|nummer,C,12,0|k_superfic,F,19,11|Nome_zone_,C,12,0

rec.toMap = {TARGET_FID=327284, nummer=315, Nome_zone_=RE

Thanks or your help.

Paolo

@paoloromani
Copy link
Author

paoloromani commented May 6, 2016

My solution:

DbfRecors.java
public Map<String, Object> toMap() throws ParseException {
Map<String, Object> map = new LinkedHashMap<String, Object>(getFields().size() * 2);

    for (DbfField f : getFields()) {
        String name = f.getName();
        switch (f.getType()) {

            case Character:
                map.put(name, getString(name));
                break;

            case Date:
                map.put(name, getDate(name));
                break;

            case Numeric:
                map.put(name, getBigDecimal(name));
                break;

            case Float:
                map.put(name, getBigDecimal(name));
                break;                    

            case Logical:
                map.put(name, getBoolean(name));
                break;

            case Integer:
                map.put(name, getInteger(name));
                break;
        }
    }

    return map;
}

meta.getFieldsStringRepresentation() = TARGET_FID,N,9,0|nummer,C,12,0|k_superfic,F,19,11|Nome_zone_,C,12,0

rec.toMap = {TARGET_FID=327284, nummer=315,k_superfic=23.897, Nome_zone_=RE

@tballison
Copy link

Any chance you'd be willing to share your test file? We just added a dbf parser on Apache Tika and we need examples of Float fields.

@jhernancanom
Copy link

Hi, Paolo and friends.

I have similar interests: reading (and writing) DBF files. I am also having issues with reading (and writing) numeric fields (not exactly Float, but Double and Integer --as known in xBase languages--).

Specifically wih Float fields I am not having issues: I added routines to the original script and I am getting correct results: reading and writing them.

I consider that we could share info with this respect. I know the zorro language well.

Let me know how we can proceed. You can get me as jhernancanom.
I am in hotmail.

HERNAN CANO M
Systems Analyst

@tballison
Copy link

Hi Hernan,
Any chance you could share a test file? We'd want to fix this over on Apache Tika as well. Thank you!

@iryndin
Copy link
Owner

iryndin commented Feb 21, 2017

@paoloromani Could you please share your DBF file ?

@jhernancanom
Copy link

Hi, friends.
I am attaching my sample DBF.

  1. The DBF is file aked by you (SAMPLE_2_DBF.txt, take off the TXT extension, and put DBF).
  2. The STR is the structure as Fox shows us (SAMPLE_2_.TXT).
  3. The PNG is an image about how Fox shows us.

Notes:
The file has the basic type of fields that an xBase engine manages: Character (that is to say String), Logical (that is to say Boolean), Numeric (both integers and reals--with decimals--), and Date.

I also have incorporated two Float fields according to your asking; one has decimals and another without decimals.
I wait this can help you.

I'll start with my needs.

The very basic field for numeric data in xBase is Numeric that can be defined to have decimals or not.
Later the xBase dialects add some more numerical types: Float, Double, Integer and Currency.

I have attached a .DOC file that shows some features of field types.
For example: Float is the same as Numeric. Integer is 4 bytes long when saved in a DBF file. If the precision of Double type and Float type is the same, and Double has a broad range, then it means that Double must be encrypted/converted to allocate correctly (and also for Integer type).

Data and Field Types.docx

sample_2_
SAMPLE_2_.TXT

SAMPLE_2_DBF.txt

Based on this I consider that our script should be correct: if you can get a Numeric value in your Java with getBigDecimal, that it could be used for getting a Float (Fox dialect).

If you need any more, you can write.

Thanks, friends.

HERNAN C

@iryndin
Copy link
Owner

iryndin commented Feb 24, 2017

@jhernancanom Thanks a lot, I started looking into it. Will put updates here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants