Good way for append some string to every line of exists text file
-
wrote on 14 Sept 2011, 22:20 last edited by
I need append various string to every row of text file.
Example
Before:
bq.
aaa|bbb
ccc|ddd
eee|fffAfter:
bq.
aaa|bbb|ggg
ccc|ddd|hhh
eee|fff|jjjYour suggestions?
-
wrote on 14 Sept 2011, 23:25 last edited by
I don't have any other idea than to copy the file line by line (using readLine() of a [[Doc:QTextStream]]) and append the string on the write step.
-
wrote on 15 Sept 2011, 07:13 last edited by
If the files are not too big, I would read it to a QStringList and append there. Then store it again.
Otherwise, I would use Volker's suggestion -
wrote on 15 Sept 2011, 07:27 last edited by
If your file has new line char at the end of the lines, get the whole information (readAll()) and split it using the newline char to get QStringList. From there you can split every QString with your delimiter to get the different values. Volker's suggestion looks more elegant though.
What's your intention? Are you trying to build some sort of a file like *.csv? If it's intended to be application settings, you will probably be better using QSettings with ini format instead.
-
wrote on 15 Sept 2011, 07:35 last edited by
Eus You are right it is CSV :) and sometimes I need add new column.
Not it's not for settings it's app for observe data, which write data changes to CSV format, for to be able build graph in MS Exel -
wrote on 15 Sept 2011, 07:42 last edited by
If your app is gonna output the csv on demand, you can always use some databse to save your data in a way which would be easier for you to work with. But I guess that would make it more complex then actually needed.
Well, the suggestions so far should work for you. I assume you validate the user input for "|" (so you don't get some "extra columns" in your csv :P). QStringList seems the way to go.
-
wrote on 15 Sept 2011, 08:01 last edited by
I don't want keep all data from file in memory, it's not needed
I'm worry about integrity data structure in file.
So I think I will create temp file for inserting and after insert just change temp file to persistent. -
wrote on 16 Sept 2011, 22:46 last edited by
[quote author="Vass" date="1316073685"]I don't want keep all data from file in memory, it's not needed
I'm worry about integrity data structure in file.
So I think I will create temp file for inserting and after insert just change temp file to persistent.[/quote]That's the way I would go. Maybe add some file locking, so that nobody can change the source file while you are processing it.
-
wrote on 17 Sept 2011, 16:12 last edited by
@Vaas: despite of the number of columns periodically updated, the number of rows in your file is fixed? How many records ?
-
wrote on 18 Sept 2011, 04:35 last edited by
[quote author="Alicemirror" date="1316275922"] the number of rows in your file is fixed?[/quote]
of course, not.[quote author="Volker" date="1316213165"]
That's the way I would go. Maybe add some file locking, so that nobody can change the source file while you are processing it.
[/quote]I solved it with temp file, just doing copy of current file, changes it, and rewrite original.
I'm not worry about external changes. I'm worry about integrity data structure after immediately power off, for example. -
wrote on 18 Sept 2011, 05:21 last edited by
@Vass: the solution of temp maybe good, I have adopted a similar in a application where I need to download a file and ony when the file is correctly stored on the (tmp folder) device then I can decide if the older file should be delete and substituted by the newly loaded.
Despite of this, what I mean is the following:
having a set of csv records (rows) where you periodically should add a new value (field -> excel colum) to all the records is it possible that the best approach is to inver rows and columns? It the element growing is the number of columns this will be the number of samples. Obviously it is only an intuituion because I don't know the data nature of your samples.
-
wrote on 18 Sept 2011, 05:35 last edited by
@Alicemirror Unfortunately, rows count not fixed, and changes more often than column count.
-
wrote on 18 Sept 2011, 07:00 last edited by
@Vass: you have created a monster! :)
-
wrote on 18 Sept 2011, 07:27 last edited by
:)
No, it is just parser of table from web -
wrote on 18 Sept 2011, 07:40 last edited by
Interesting ...
I have done somthing time ago and it was really helpful the solutions adopted by the wget command (Linux) -
wrote on 18 Sept 2011, 07:47 last edited by
I mean it's no general parser of tables from web :)
It's one local task on my freelance work. :) -
wrote on 18 Sept 2011, 08:01 last edited by
Yes I had understood :)
Probably there are not best ways to manage these data. Regarding the proposal of a SQLite database on the device, did you checked if this component has some kind of protection on the transictions to give you the robustness that you need against data loss ?
-
wrote on 18 Sept 2011, 08:15 last edited by
One of customer requrements: nothing databases - only CSV :)
-
wrote on 18 Sept 2011, 08:22 last edited by
Me too I'm fighting with customer in these days. They have always great ideas :) Seems very experts in mobile development...
3/19