This is more of a general question about how to approach a task than about a specific piece of code. My question is how to go about this or if there is a better way?
I have a CSV file. I am parsing the CSV file line by line. The first column contains the categories. So for example any lines, containing 'apple' as the first column would go into the apple array, any lines containing banana in the first column would go into the banana array and so on. Okay. The next thing I want is to select a line, string split it into it's own array, so I can manipulate it's elements. So it would all look like this:
1. parse CSV file. csv
2. Separate lines into lists. IE: Categories := [apple, banana, orange, etc.]
3. Separate individual lines into smaller lists. IE: Line 2 in the apple category would be, Apple_2 := ["apple", "red", "large", etc.]
4. Manipulate elements in selected line. IE: Apple_2.insertat(2, "green")
But then, once I make whatever changes to whichever lines, I want to append everything into a new CSV file. So I guess it would be like objects within an array. I am doing this as a sort of database. I agree it's probably not the best way to go about it. I also thought about doing an INI file instead, but I feel like ini files are more for settings than actual data. I have noticed the bigger they get, they become harder to read. Also I like the accessibility of spreadsheet or text file. There is also the possibility of using Com Objects with an excel spreadsheet but I am running libre office and that's a whole other animal. So any help or advise with this would be greatly appreciated.
Manipulating multiple lists Topic is solved
-
- Posts: 76
- Joined: 07 Dec 2018, 12:08
Re: Manipulating multiple lists Topic is solved
each time you parse a new line, and create an array for that line, just push that array onto a wholefile array. would that work?
then at the end, you can traverse through the wholefile array and write each line individually
Code: Select all
wholefile := []
; parse line2
Apple_2 := ["apple", "red", "large"]
; add this array to a bigger array
wholefile.push(Apple_2)
-
- Posts: 76
- Joined: 07 Dec 2018, 12:08
Re: Manipulating multiple lists
That is actually, a very good idea. In fact, I think I'll turn the entire CSV into an array. That way I can delete lines and add new lines as needed.
Re: Manipulating multiple lists
made this a while ago
Code: Select all
/*
Name:
Version 1.1 (Wednesday, December 02, 2015)
Created: (Sat February 16, 2013)
Author: tidbit
Credit:
Hotkeys:
esc --- Quit
Description:
load a csv to array or turn an array into csv.
*/
; Template script (you can customize this template by editing "ShellNew\Template.ahk" in your Windows folder)
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance, force
FileEncoding, UTF-8
; fileRead, csvdata, %A_ScriptDir%\hello.csv
csvdata=
(
1,"Do something","2,5,6",0,"aaa",20150416105540
2,"Do something","1,5",0,"bbb",20150416113128
2,"Do something","1,5",1,"ccc",20150416104640
3,"Do something","1,2,5,7",0,"ddd",20150416140828
)
o:=load(csvdata)
MsgBox % st_printArr(o)
exitapp
Esc::Exitapp
st_printArr(array, depth=5, indentLevel="")
{
for k,v in Array
{
list.= indentLevel "[" k "]"
if (IsObject(v) && depth>1)
list.="`n" st_printArr(v, depth-1, indentLevel . " ")
Else
list.=" => " v
list.="`n"
}
return rtrim(list)
}
load(csv)
{
arr:=[]
loop, parse, csv, `n, `r
{
row:=a_index
loop, parse, A_LoopField, CSV
arr[row, a_index]:=A_LoopField
}
return arr
}
save(arr)
{
for row, arr2 in arr
{
for k, val in arr2
{
if val is not number ; wrap non-numbers in quotes
val:="""" val """"
out.= val ","
}
out:=subStr(out, 1, -1) "`n" ; remove the unneeded last comma
}
; return out
return rtrim(out, "`r`n")
}
rawr. fear me.
*poke*
Is it December 21, 2012 yet?
*poke*
Is it December 21, 2012 yet?
-
- Posts: 76
- Joined: 07 Dec 2018, 12:08
Re: Manipulating multiple lists
This is great! Thanks Tidbit.
Who is online
Users browsing this forum: Google [Bot], NinjoOnline and 216 guests