Add store_csv_line method for File
This commit is contained in:
parent
a2e4eb7533
commit
48166a9f3c
5 changed files with 50 additions and 10 deletions
|
@ -1754,9 +1754,9 @@ String _File::get_line() const {
|
||||||
return f->get_line();
|
return f->get_line();
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<String> _File::get_csv_line(String delim) const {
|
Vector<String> _File::get_csv_line(const String &p_delim) const {
|
||||||
ERR_FAIL_COND_V(!f, Vector<String>());
|
ERR_FAIL_COND_V(!f, Vector<String>());
|
||||||
return f->get_csv_line(delim);
|
return f->get_csv_line(p_delim);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
|
/**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
|
||||||
|
@ -1853,6 +1853,11 @@ void _File::store_line(const String &p_string) {
|
||||||
f->store_line(p_string);
|
f->store_line(p_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _File::store_csv_line(const Vector<String> &p_values, const String &p_delim) {
|
||||||
|
ERR_FAIL_COND(!f);
|
||||||
|
f->store_csv_line(p_values, p_delim);
|
||||||
|
}
|
||||||
|
|
||||||
void _File::store_buffer(const PoolVector<uint8_t> &p_buffer) {
|
void _File::store_buffer(const PoolVector<uint8_t> &p_buffer) {
|
||||||
|
|
||||||
ERR_FAIL_COND(!f);
|
ERR_FAIL_COND(!f);
|
||||||
|
@ -1936,6 +1941,7 @@ void _File::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("get_real"), &_File::get_real);
|
ClassDB::bind_method(D_METHOD("get_real"), &_File::get_real);
|
||||||
ClassDB::bind_method(D_METHOD("get_buffer", "len"), &_File::get_buffer);
|
ClassDB::bind_method(D_METHOD("get_buffer", "len"), &_File::get_buffer);
|
||||||
ClassDB::bind_method(D_METHOD("get_line"), &_File::get_line);
|
ClassDB::bind_method(D_METHOD("get_line"), &_File::get_line);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_csv_line", "delim"), &_File::get_csv_line, DEFVAL(","));
|
||||||
ClassDB::bind_method(D_METHOD("get_as_text"), &_File::get_as_text);
|
ClassDB::bind_method(D_METHOD("get_as_text"), &_File::get_as_text);
|
||||||
ClassDB::bind_method(D_METHOD("get_md5", "path"), &_File::get_md5);
|
ClassDB::bind_method(D_METHOD("get_md5", "path"), &_File::get_md5);
|
||||||
ClassDB::bind_method(D_METHOD("get_sha256", "path"), &_File::get_sha256);
|
ClassDB::bind_method(D_METHOD("get_sha256", "path"), &_File::get_sha256);
|
||||||
|
@ -1943,7 +1949,6 @@ void _File::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_endian_swap", "enable"), &_File::set_endian_swap);
|
ClassDB::bind_method(D_METHOD("set_endian_swap", "enable"), &_File::set_endian_swap);
|
||||||
ClassDB::bind_method(D_METHOD("get_error"), &_File::get_error);
|
ClassDB::bind_method(D_METHOD("get_error"), &_File::get_error);
|
||||||
ClassDB::bind_method(D_METHOD("get_var"), &_File::get_var);
|
ClassDB::bind_method(D_METHOD("get_var"), &_File::get_var);
|
||||||
ClassDB::bind_method(D_METHOD("get_csv_line", "delim"), &_File::get_csv_line, DEFVAL(","));
|
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("store_8", "value"), &_File::store_8);
|
ClassDB::bind_method(D_METHOD("store_8", "value"), &_File::store_8);
|
||||||
ClassDB::bind_method(D_METHOD("store_16", "value"), &_File::store_16);
|
ClassDB::bind_method(D_METHOD("store_16", "value"), &_File::store_16);
|
||||||
|
@ -1954,6 +1959,7 @@ void _File::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("store_real", "value"), &_File::store_real);
|
ClassDB::bind_method(D_METHOD("store_real", "value"), &_File::store_real);
|
||||||
ClassDB::bind_method(D_METHOD("store_buffer", "buffer"), &_File::store_buffer);
|
ClassDB::bind_method(D_METHOD("store_buffer", "buffer"), &_File::store_buffer);
|
||||||
ClassDB::bind_method(D_METHOD("store_line", "line"), &_File::store_line);
|
ClassDB::bind_method(D_METHOD("store_line", "line"), &_File::store_line);
|
||||||
|
ClassDB::bind_method(D_METHOD("store_csv_line", "values", "delim"), &_File::store_csv_line, DEFVAL(","));
|
||||||
ClassDB::bind_method(D_METHOD("store_string", "string"), &_File::store_string);
|
ClassDB::bind_method(D_METHOD("store_string", "string"), &_File::store_string);
|
||||||
ClassDB::bind_method(D_METHOD("store_var", "value"), &_File::store_var);
|
ClassDB::bind_method(D_METHOD("store_var", "value"), &_File::store_var);
|
||||||
|
|
||||||
|
|
|
@ -455,6 +455,7 @@ public:
|
||||||
|
|
||||||
PoolVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes
|
PoolVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes
|
||||||
String get_line() const;
|
String get_line() const;
|
||||||
|
Vector<String> get_csv_line(const String &p_delim = ",") const;
|
||||||
String get_as_text() const;
|
String get_as_text() const;
|
||||||
String get_md5(const String &p_path) const;
|
String get_md5(const String &p_path) const;
|
||||||
String get_sha256(const String &p_path) const;
|
String get_sha256(const String &p_path) const;
|
||||||
|
@ -480,12 +481,11 @@ public:
|
||||||
|
|
||||||
void store_string(const String &p_string);
|
void store_string(const String &p_string);
|
||||||
void store_line(const String &p_string);
|
void store_line(const String &p_string);
|
||||||
|
void store_csv_line(const Vector<String> &p_values, const String &p_delim = ",");
|
||||||
|
|
||||||
virtual void store_pascal_string(const String &p_string);
|
virtual void store_pascal_string(const String &p_string);
|
||||||
virtual String get_pascal_string();
|
virtual String get_pascal_string();
|
||||||
|
|
||||||
Vector<String> get_csv_line(String delim = ",") const;
|
|
||||||
|
|
||||||
void store_buffer(const PoolVector<uint8_t> &p_buffer); ///< store an array of bytes
|
void store_buffer(const PoolVector<uint8_t> &p_buffer); ///< store an array of bytes
|
||||||
|
|
||||||
void store_var(const Variant &p_var);
|
void store_var(const Variant &p_var);
|
||||||
|
|
|
@ -346,9 +346,9 @@ String FileAccess::get_line() const {
|
||||||
return String::utf8(line.get_data());
|
return String::utf8(line.get_data());
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<String> FileAccess::get_csv_line(String delim) const {
|
Vector<String> FileAccess::get_csv_line(const String &p_delim) const {
|
||||||
|
|
||||||
ERR_FAIL_COND_V(delim.length() != 1, Vector<String>());
|
ERR_FAIL_COND_V(p_delim.length() != 1, Vector<String>());
|
||||||
|
|
||||||
String l;
|
String l;
|
||||||
int qc = 0;
|
int qc = 0;
|
||||||
|
@ -376,7 +376,7 @@ Vector<String> FileAccess::get_csv_line(String delim) const {
|
||||||
CharType c = l[i];
|
CharType c = l[i];
|
||||||
CharType s[2] = { 0, 0 };
|
CharType s[2] = { 0, 0 };
|
||||||
|
|
||||||
if (!in_quote && c == delim[0]) {
|
if (!in_quote && c == p_delim[0]) {
|
||||||
strings.push_back(current);
|
strings.push_back(current);
|
||||||
current = String();
|
current = String();
|
||||||
} else if (c == '"') {
|
} else if (c == '"') {
|
||||||
|
@ -525,6 +525,28 @@ void FileAccess::store_line(const String &p_line) {
|
||||||
store_8('\n');
|
store_8('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FileAccess::store_csv_line(const Vector<String> &p_values, const String &p_delim) {
|
||||||
|
|
||||||
|
ERR_FAIL_COND(p_delim.length() != 1);
|
||||||
|
|
||||||
|
String line = "";
|
||||||
|
int size = p_values.size();
|
||||||
|
for (int i = 0; i < size; ++i) {
|
||||||
|
String value = p_values[i];
|
||||||
|
|
||||||
|
if (value.find("\"") != -1 || value.find(p_delim) != -1 || value.find("\n")) {
|
||||||
|
value = "\"" + value.replace("\"", "\"\"") + "\"";
|
||||||
|
}
|
||||||
|
if (i < size - 1) {
|
||||||
|
value += p_delim;
|
||||||
|
}
|
||||||
|
|
||||||
|
line += value;
|
||||||
|
}
|
||||||
|
|
||||||
|
store_line(line);
|
||||||
|
}
|
||||||
|
|
||||||
void FileAccess::store_buffer(const uint8_t *p_src, int p_length) {
|
void FileAccess::store_buffer(const uint8_t *p_src, int p_length) {
|
||||||
|
|
||||||
for (int i = 0; i < p_length; i++)
|
for (int i = 0; i < p_length; i++)
|
||||||
|
|
|
@ -112,7 +112,7 @@ public:
|
||||||
virtual int get_buffer(uint8_t *p_dst, int p_length) const; ///< get an array of bytes
|
virtual int get_buffer(uint8_t *p_dst, int p_length) const; ///< get an array of bytes
|
||||||
virtual String get_line() const;
|
virtual String get_line() const;
|
||||||
virtual String get_token() const;
|
virtual String get_token() const;
|
||||||
virtual Vector<String> get_csv_line(String delim = ",") const;
|
virtual Vector<String> get_csv_line(const String &p_delim = ",") const;
|
||||||
|
|
||||||
/**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
|
/**< use this for files WRITTEN in _big_ endian machines (ie, amiga/mac)
|
||||||
* It's not about the current CPU type but file formats.
|
* It's not about the current CPU type but file formats.
|
||||||
|
@ -136,6 +136,7 @@ public:
|
||||||
|
|
||||||
virtual void store_string(const String &p_string);
|
virtual void store_string(const String &p_string);
|
||||||
virtual void store_line(const String &p_line);
|
virtual void store_line(const String &p_line);
|
||||||
|
virtual void store_csv_line(const Vector<String> &p_values, const String &p_delim = ",");
|
||||||
|
|
||||||
virtual void store_pascal_string(const String &p_string);
|
virtual void store_pascal_string(const String &p_string);
|
||||||
virtual String get_pascal_string();
|
virtual String get_pascal_string();
|
||||||
|
|
|
@ -100,7 +100,7 @@
|
||||||
<argument index="0" name="delim" type="String" default="","">
|
<argument index="0" name="delim" type="String" default="","">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns the next value of the file in CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma).
|
Returns the next value of the file in CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma), it should be one character long.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_double" qualifiers="const">
|
<method name="get_double" qualifiers="const">
|
||||||
|
@ -327,6 +327,17 @@
|
||||||
Stores the given array of bytes in the file.
|
Stores the given array of bytes in the file.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="store_csv_line">
|
||||||
|
<return type="void">
|
||||||
|
</return>
|
||||||
|
<argument index="0" name="values" type="PoolStringArray" default="","">
|
||||||
|
</argument>
|
||||||
|
<argument index="1" name="delim" type="String" default="","">
|
||||||
|
</argument>
|
||||||
|
<description>
|
||||||
|
Store the given [PoolStringArray] in the file as a line formatted in the CSV (Comma Separated Values) format. You can pass a different delimiter to use other than the default "," (comma), it should be one character long.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="store_double">
|
<method name="store_double">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
|
|
Loading…
Reference in a new issue