如何解析CSV文件
我试图读取由一些行组成的文件,每行包含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)
{}
}
一个更好的方法是创建一个类来表示用户:
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.contains
,users.getElementAt
与用户的收集工作,Collections.sort
,Collections.binarySearch
等
我会尝试你的解决方案,非常感谢你的时间 – Katherine99 2013-02-25 21:13:06
不客气。 – Simon 2013-02-25 21:29:16
这里是另一个问题,在C++解析CVS帮助:How can I read and parse CSV files in C++?
如果你是开放的其他语言,如蟒蛇,它可能是更容易。例如,Python具有内置的CSV工具: http://docs.python.org/2/library/csv.html
我没有看到任何地方调用了getDNI(),getNombre()或getgetEnunciado()函数。有更多的代码我们失踪了吗? – Blumer 2013-02-25 20:43:39