2013-02-25 147 views
0

我试图读取由一些行组成的文件,每行包含3个部分:id,name和surname。还有一个EditText,用户需要输入他的id,并且如果它与从文件中读取的其中一个匹配,它应该显示如下这样的对话框:你是“Name”还是“Username”?如何解析CSV文件

我试过做下列事情,但不幸的是它不工作。

public String getDNI() { 
    String[] parts = fichero.split("\\,"); 
    String DNI = parts[0]; 
    return DNI; 
} 

public String getNombre() { 
    String[] parts = fichero.split("\\,"); 
    String Nombre = parts[1]; 
    return Nombre; 
} 

public String getEnunciado() { 
    String[] parts = fichero.split("\\,"); 
    String Apellido = parts[2]; 
    return Apellido; 
} 



public void onCreate(Bundle icicle) 
    { 
     super.onCreate(icicle); 
     setContentView(R.layout.identificacion); 
     Button bSiguiente = (Button) findViewById(R.id.btn_siguiente); 
    dniText = (EditText) findViewById(R.id.dni_candidato); 

    try { 
      InputStream is = getAssets().open(File); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
      // Skips lines 
      for (i = 0; i<= 100; i++) { 
       reader.readLine(); 

      } 
      fichero = reader.readLine(); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 



bSiguiente.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View arg0) { 



    try{ 
     longitud = dniText.getText().toString(); 
      user = Integer.parseInt(dniText.getText().toString()); 
      DNIWord(user); 
      for (i = 0; i<= 100; i++) { 
     if (longitud.equals(getDNI())){ 
      // (longitud.length()==8){ 
        showDialog(DIALOG_CONFIRMAR_CANDIDATO);} 

       else{ 
       showDialog(DIALOG_ERROR_DNI); 
       } 

    } 
    } 
     catch (NumberFormatException e) 
    {} 
    } 
+1

我没有看到任何地方调用了getDNI(),getNombre()或getgetEnunciado()函数。有更多的代码我们失踪了吗? – Blumer 2013-02-25 20:43:39

回答

2

一个更好的方法是创建一个类来表示用户:

class User{ 
    public String nombre; 
    public String enunciado; 
    public String dni; 

    public User(String nombre, String enunciado, String dni){ 
     this.nombre = nombre; 
     this.enunciado = enunciado; 
     this.dni = dni; 
    } 

    public User(String csvLine){ 
     String[] values = csvLine.split(","); 
     this(values[0], values[1], values[2]); 
    } 

} 

我更喜欢第一个构造函数,因为它更易于阅读。

使用这样的:

ArrayList<User> users = new ArrayList<User>(); 

... 

    String s; 
    while ((s = reader.readLine()) != null) { 
     users.add(new User(s)); 
    } 

String s; 
String[] value; 
while ((s = reader.readLine()) != null) { 
    values = s.split(","); 
    users.add(new User(values[0], values[1], values[2])); <-- prefer this one 
} 

为了使其更好:

public static final int DNI = 0; 
public static final int NOMBRE = 1; 
public static final int ENUNCIADO = 2; 

... 

    String s; 
    String[] value; 
    while ((s = reader.readLine()) != null) { 
     values = s.split(","); 
     users.add(new User(values[DNI], values[NOMBRE], values[ENUNCIADO])); 
    } 

现在你可以使用users.containsusers.getElementAt与用户的收集工作,Collections.sortCollections.binarySearch

+0

我会尝试你的解决方案,非常感谢你的时间 – Katherine99 2013-02-25 21:13:06

+0

不客气。 – Simon 2013-02-25 21:29:16