Ammesso e non concesso che quanto allegato possa servire da base di partenza, cosa dovresti leggere?
Signori e signore, saro' breve :-)
Prima di tutto, appena posso vedo anche come applicare questa cosa anche come struttura, grazie. Vediamo quali erano le mie intenzioni: come dicevo tempo fa, sto costruendo/modificando da decenni un'applicazione per gestirmi i miei file multimediali. Delle cose si fanno meglio con Gambas direttamente, altre sarebbero piu' semplici e veloci usando librerie e programmi.
Per le tag, ad esempio, un'applicazione che legge tutti i file (inclusi .dsf e .dxd, i bluray) e' kid3 (potrei dire perche' proprio questo, ma c'entra poco con questo topic). E' interfacciabile tramite shell o tramite dbus. Non e' che la velocita' cambi poi tanto, o meglio, in entrambi i casi e' piuttosto veloce. Ammetto di aver usato anche l'esempio di vuott su taglib ora sulla Wiki, che funzionava benissimo a patto di dichiarare la libreria come "libtag_c", volendo usare pero' altri tag custom non ho trovato che pochissimi esempi. Anche su Dbus non ho trovato molto, ho provato perfino due o tre AI, che in queste cose possono agire come comici.
Comunque, kid3 a linea di comando puo' richiamare un file qml (modificabile e allegato con il programma), e ottenere un file csv con le tag, in un tempo piuttosto breve: la mia idea era di leggere comunque le tag di tutto, pero' a volte le colonne hanno titoli, presenza o meno, e ordine diversi. Provando con gli array, cosa ho fatto (semplifico):
Ho dichiarato delle costanti, con l'idea di associare poi il nome all'array
Private Const fname As Integer = 0
Private Const title As Integer = 1
Private Const track As Integer = 2
...
e poi una struttura :-), che mi servira' per salvare la posizione dei vari campi del file successivamente
Public Struct TagMap
artist As Integer
fname As Integer
xinfo As Integer
......
End Struct
Letto il file csv, la prima riga e' quella dei nomi, e quindi la splitto (ha un comodo tab per divisore)
filetags = Split(filerows[0], "\t")
Devo quindi vedere cosa c'e': in pratica associo la posizione al campo
For i = 0 To filetags.count - 1
Select Case LCase(filetags[i])
Case "file path"
MyTag[fname] = i
Case "track number"
MyTag[track] = i
........
Questo sulla prima riga del file csv: le restanti sono le righe con i tag
For i = 1 To filerows.Count - 1
filetags = Split(filerows[i], "\t")
arrcount += 1
arr.add(arrItem) 'è un array a lunghezza fissa
arr[arrcount][fname] = filetags[MyTag[fname]]
A questo punto, ho un array a cui basta controllare se arr[fname] e' uguale al nome del file cercato, e poi prendere i valori (es arr[xinfo])