عامل منجم سريع:كسف مع الأرقام الحقيقية مع الفواصل بدلا من النقاط

StackOverflow https://stackoverflow.com/questions/5889179

سؤال

لدي مشكلة في استيراد ملف كسف مع رابيدمينر.تتم كتابة قيم الفاصلة العائمة بفواصل بدلا من النقطة الفاصلة بين القيم الصحيحة والقيم العشرية.

أي شخص يعرف كيفية استيراد القيم المنسقة بهذه الطريقة بشكل صحيح?

بيانات العينة:

BMI;1;0;1;1;1;blue;-0,138812155;0,520378909;5;0;50;107;0;9;0;other;good;2011 BMI;1;0;1;1;1;pink;-0,624654696;;8;0;73;120;1;3;0,882638889;other;good;2011

عامل منجم السريع يفسر في الواقع بأنها"متعدد الحدود".إجبارها على" حقيقي "يؤدي فقط إلى التفسير الصحيح للقيمة" 0".

شكرا

هل كانت مفيدة؟

المحلول

استخدم شبه القولون كمحدد.يمكنك استخدام java.util.Scanner لقراءة كل سطر. String.split() لتقسيم على شبه القولون.عندما تحصل على رمز مميز بفاصلة ، يمكنك استخدامه String.replace() لتغيير الفاصلة إلى رقم عشري.ثم يمكنك استخدام Float.parseFloat()

نأمل أن يكون هذا يجيب عليك السؤال.

نصائح أخرى

يبدو أن هذا طلب قديم جدا.لست متأكدا مما إذا كان هذا سيساعدك ، ولكن هذا قد يساعد الآخرين في موقف مماثل.

الخطوة 1:في عامل تشغيل "قراءة كسف" ، ضمن "معالج تكوين الاستيراد" ، تأكد من تحديد" فاصلة منقوطة " كفاصل

الخطوة 2:استخدم عامل تشغيل "أنواع التخمين".نوع مرشح السمة - > مجموعة فرعية ، حدد السمات - > حدد السمات 8 و 9 و 16 (بناء على المثال أعلاه) ، وقم بتغيير "حرف الفاصلة العشرية" إلى " ، " ويجب أن تكون جاهزا تماما.

آمل أن يساعد هذا (شخص ما!)

public static void main(String args){
    BufferedReader br = new BufferedReader(new FileReader("c:\\path\\semicolons and numbers and commas.csv"));
    try {
        for(String line; (line=br.readLine()) != null);) {
            //Variable line now has a single line from the file. This code will execute for each line.
            String array = line.split(";");// Split on the semicolon. Beware of changing this. This uses regex which means that some characters mean something like . means anything, not just dots.
            double firstDouble = Double.parseDouble(array[7].replace(',','.')); // Get field 7 (the eighth field) and turn it into a double (high precision floating point). Replace , with . so it will not make an error
            System.err.println("Have a number " + firstDouble);
            System.err.println("Can play with it " + (firstDouble * 2.0));
        }
    }finally{
        br.close(); // Free resources (and unlock file on Windows).
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top