Browse Source

Merge pull request #3502 from trtstm/csv

Added delimiter to File.get_csv_line
Rémi Verschelde 9 years ago
parent
commit
7cb930dbed
4 changed files with 9 additions and 7 deletions
  1. 3 3
      core/bind/core_bind.cpp
  2. 1 1
      core/bind/core_bind.h
  3. 4 2
      core/os/file_access.cpp
  4. 1 1
      core/os/file_access.h

+ 3 - 3
core/bind/core_bind.cpp

@@ -1321,9 +1321,9 @@ String _File::get_line() const{
 
 }
 
-Vector<String> _File::get_csv_line() const {
+Vector<String> _File::get_csv_line(String delim) const {
 	ERR_FAIL_COND_V(!f,Vector<String>());
-	return f->get_csv_line();
+	return f->get_csv_line(delim);
 }
 
 /**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
@@ -1506,7 +1506,7 @@ void _File::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("set_endian_swap","enable"),&_File::set_endian_swap);
 	ObjectTypeDB::bind_method(_MD("get_error:Error"),&_File::get_error);
 	ObjectTypeDB::bind_method(_MD("get_var"),&_File::get_var);
-	ObjectTypeDB::bind_method(_MD("get_csv_line"),&_File::get_csv_line);
+	ObjectTypeDB::bind_method(_MD("get_csv_line","delim"),&_File::get_csv_line,DEFVAL(","));
 
 	ObjectTypeDB::bind_method(_MD("store_8","value"),&_File::store_8);
 	ObjectTypeDB::bind_method(_MD("store_16","value"),&_File::store_16);

+ 1 - 1
core/bind/core_bind.h

@@ -392,7 +392,7 @@ public:
 	virtual void store_pascal_string(const String& p_string);
 	virtual String get_pascal_string();
 
-	Vector<String> get_csv_line() const;
+	Vector<String> get_csv_line(String delim=",") const;
 
 
 	void store_buffer(const DVector<uint8_t>& p_buffer); ///< store an array of bytes

+ 4 - 2
core/os/file_access.cpp

@@ -277,7 +277,9 @@ String FileAccess::get_line() const {
 	return String::utf8(line.get_data());
 }
 
-Vector<String> FileAccess::get_csv_line() const {
+Vector<String> FileAccess::get_csv_line(String delim) const {
+
+	ERR_FAIL_COND_V(delim.length()!=1,Vector<String>());
 
 	String l;
 	int qc=0;
@@ -303,7 +305,7 @@ Vector<String> FileAccess::get_csv_line() const {
 		CharType s[2]={0,0};
 
 
-		if (!in_quote && c==',') {
+		if (!in_quote && c==delim[0]) {
 			strings.push_back(current);
 			current=String();
 		} else if (c=='"') {

+ 1 - 1
core/os/file_access.h

@@ -102,7 +102,7 @@ public:
 
 	virtual int get_buffer(uint8_t *p_dst,int p_length) const; ///< get an array of bytes
 	virtual String get_line() const;
-	virtual Vector<String> get_csv_line() const;
+	virtual Vector<String> get_csv_line(String delim=",") const;
 	
 	/**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
 	 * It's not about the current CPU type but file formats.