Sure, i understand, and since they are empty fields, it would solve this problem. I can try to program some CSV functionality like that with Visual Basic later, and leave it here, in case someone needs to use it.
I thank you very much for the help.
It would be ideal, and a dream, if everything could be written on the same line of text.
If you have varying contents, then CSV is not the optimum data format as it relies on fixed positions for data.
So, e.g. it expects data for TRACK always to be in the 3rd section.
But if you put artist data into the 3rd section then this would still be stored in TRACK.
The only way out of this would be to use some kind of xml structure which then would be exported into a kind of CSV file but with just 2 sections:
- the filename to indicate to which file the data belongs and
- the xml part
The xml part has data like <artist>Beatles</artist><track>1</track><title>Let it be</title>
And this whole string gets imported into a user-defined field e.g. XMLDATA.
Once in the field XMLDATA you split it with just 1 action group that contains a number of actions, one for each field to be filled, e.g.
Format value for ARTIST
Format string: %artist%\\$regexp(%XMLDATA%,'.*<artist>(.*)</artist>.*,$1)
which would extract the new data from the XML structure and add that data as (new) field to ARTIST.
You would have to create similar actions for all the other fields - but the benefit would be that you have to add the action only once to the action group and from them on you can import any amount of fields from the text file without bothering about the position of each section.
It seems like a good solution. It's something similar to what i'm doing with Visual Basic in Excel, but this looks better. I can try it during these days.
I have a lot of tasks to do to be good at this.
Thank you very much for the time.
Indeed, i worked on an xlsm that does the following:
- The files in "Column A" (which are the categories) automatically move to "Column C", with the following rules:
A. Each "track" is considered to separate a group of data.
B. Duplicates will be removed.
C. % is added before and after.
D. They are separated by ;
Column A:
Track 1
Composer
Composer
Lyricist
Album
Column B:
Paul McCartney\\John Lennon
John Lennon
Abbey Road
Track 2
Track 3, etc.
Then the result in "Column C" will look like this:
%composer%;%lyricist;%album%
Afterwards, a 2nd "macro" is executed that takes the data from "Column B" and divides it by ;
The rules are that it automatically considers the same groups separated by "Track 1, Track 2, Track 3", etc, and saves them to a folder on my desktop called "Metadata" as a CSV. I have a variation that allows each track to be saved separately (for when the data in Column A changes) and also a macro that considers equal fields.
Then i consider the data from "Column C", paste it into Mp3Tag and attach each CSV.
This is a solution that has worked for me, and i thank you for the help. I think there is undoubtedly an even faster way to do it, but i will wait until next week for that, due to work issues.
I did a time test, to estimate how long the whole process takes me:
From taking a screenshot with the metadata, passing it to Excel and executing the actions and doing the review, and it is around 11 minutes per 13-track album. I think it is a very acceptable time.
Greetings, community.
*In this reference there is the track number in column c, but it was because i added them later. What goes there is what is in D.
If you have a step in between that reads the screenshot and then passes that information to Excel, I wonder if it would be possible to write the text file immediately, bypassing Excel and then read that text file into MP3tag.
The text file would contain all the data for all the tracks in 1 album and have the structure of 1 (long) line per track and each line would have just 2 fields that could be accessed with the following format string:
%_filename_ext%==%my_xml%
Where == is the unique field separator, much better than a comma or semicolon which may be part of the data.
The text for MY_XML would contain all the data for all the fields in MP3tag but separated as described here:
https://community.mp3tag.de/t/duplicate-fields-in-metadata-with-different-values/67560/11?u=ohrenkino
You would first create the complete text file,
Select all the files from the album,
read the complete text file with Convert>Text file-Tag into all the files of the album
Execute the action group to distribute the contents of MY_XML into the various fields.
I would assume that this would go quicker ...
We can see in your screenshot that you fill every instrument and its playing artist in a separate field with the name of the instrument. For example
LEAD GUITAR
with the content
Howard Leese
I would suggest to use the official field name INVOLVEDPEOPLE for that purpose.
The ID3 standard says about the Involved People List IPLS:
The syntax for multiple entries would be

This way you can fill as many instrumentalists (and other more technical roles) into 1 single field as you like. There is a slightly better chance that a player software can read and display this official INVOLVEDPEOPLE field.
I believe this would also reduce complexity and the need for a single format string per track.
Hi, i'm having trouble understanding this. I don't know how to do it in the software:
"Run the action group to distribute the MY_XML content to the various fields."
Currently, i am using a CSV test with this: Beatles
Then, i import the file as follows to Mp3TAG:
I'm lost from here, i don't understand where i should add this Format String %artist%\\$regexp(%XMLDATA%,'.*<artist>(.*)</artist>.*,$1), which apparently extracts the data from the field that i previously added in the software
I try this but dont work:
Please can you take a few minutes to help this girl in trouble once again 
You can check a format string in Convert>Tag-Tag
If
this is the real string from the function, then you get an invalid syntax error as an ' is missing
$regexp(%XMLDATA%,'.*<artist>(.*)</artist>.*',$1)
It worked perfectly for me with just one track. I appreciate it very much.
Now i have a new problem, because i actually followed your instructions and i want to do it with a complete album. I added this data to Mp3tag, in a field called XMLDATA:
But then, i don't know how i should divide it correctly by tracks. I don't understand how or where i should use this structure:
%_filename_ext%==%my_xml%
*I infer that this function serves to divide the tracks, to separate the information from the previous data.
Of course, i've been looking for documentation, but at this point i prefer to ask, because i haven't found it myself.
Maybe you could help me? I think that's the last thing i need.
I am very grateful.
The generated text file would have e.g. such a contents:
Beatles letitbe.mp3==<artist>Beatles</artist><track>1</track><title>Let it be</title>
Beatles yellowsubmarine.mp3==<artist>Beatles</artist><track>2</track><title>Yellow Submarine</title>
Beatles Lady Madonna.mp3==<artist>Beatles</artist><track>3</track><title>Lady Madonna</title>
Please note: this is a single text file - not one for each track, with the name e.g. MyNewData.txt
- Select the files that should get the new data (and even some more if you like)
- Use Convert>Text-file - Tag, enter the mask
- and set the filename to MyNewData.txt
The data of 1 line (record) in the text file will now be imported only to the file where the data from the text for filename matches the actual filename.
All the files where (none of) the filenames do not match the data from the text file, will not get any data.
So it would be the task of your text generating VB program to create such a text file. And that could be read directly into the tags without the detour via Excel.
Thank you for so much. I already tried it and it works. I will be working during these weeks on some type of application that can optimize this process, and i hope to share it here.
A big hug.