Last active
January 2, 2018 15:56
Star
You must be signed in to star a gist
CSV conversion
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<style type="text/css"> | |
textarea { | |
width: 100%; | |
height: 300px; | |
} | |
</style> | |
<script type="text/javascript" src="http://papaparse.com/resources/js/papaparse.js"></script> | |
<script type="text/javascript" src="conversion.js"></script> | |
</head> | |
<body> | |
<label>CSV responses</label> | |
<textarea id="csv-responses"></textarea> | |
<label>CSV input</label> | |
<textarea id="csv-in"></textarea> | |
<button onclick="convertion('csv-responses', 'csv-in', 'csv-out')">Convertir</button> | |
<label>CSV output</label> | |
<textarea id="csv-out"></textarea> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function convertion (textareaResponses, textareaIn, textareaOut) { | |
// Lit le CSV de correspondance entre le libellé de réponse et le numéro de réponse | |
var csvResponse = document.getElementById(textareaResponses).value | |
var responseData = Papa.parse(csvResponse, { | |
delimiter: ';' | |
}).data | |
// Crée un mapping libellé de réponse vers numéro de réponse | |
var responses = new Map() | |
for (var linenum = 0; linenum < responseData.length; linenum++) { | |
responses.set(responseData[linenum][1].trim(), responseData[linenum][0]) | |
} | |
// Lit le CSV de toutes les réponses | |
var csvIn = document.getElementById(textareaIn).value | |
var inData = Papa.parse(csvIn, { | |
delimiter: ',' | |
}).data | |
var outData = [] | |
// Crée la première ligne d'en-têtes | |
outData.push([ | |
inData[0][0], | |
inData[0][1], | |
inData[0][2], | |
inData[0][3], | |
inData[0][4], | |
inData[0][5], | |
inData[0][6], | |
inData[0][7], | |
inData[0][8], | |
'Question', | |
'Question Number', | |
'Response', | |
'Response Number' | |
]) | |
// Boucle sur chaque ligne en sautant la première (en-têtes) | |
for (var linenum = 1; linenum < inData.length; linenum++) { | |
var line = inData[linenum] | |
// Boucle sur toutes les champs à partir du 9 | |
for (var col = 9; col < line.length; col++) { | |
// Découpe le contenu du champs par rapport au caractère ; | |
var values = line[col].split(';') | |
// Pour chaque valeur du champs | |
for (var val = 0; val < values.length; val++) { | |
// Extrait le texte se trouvant avant les deux-points dans la réponse | |
var responseText = values[val].split(':')[0].trim() | |
// Si la valeur n'est pas vide | |
if (responseText) { | |
// Numéro de la réponse, par correspondance avec le CSV de réponses | |
var responseNum = responses.get(responseText); | |
var matches = responseText.match(/^([0-9]{3}) +-/); | |
if (matches) { | |
responseNum = matches[1] | |
} | |
// On crée une nouvelle ligne contenant les champs de profil | |
outData.push([ | |
line[0], | |
line[1], | |
line[2], | |
line[3], | |
line[4], | |
line[5], | |
line[6], | |
line[7], | |
line[8], | |
inData[0][col], // Titre de la question | |
col - 8, // Numéro de la question | |
values[val], // Titre de la réponse | |
responseNum, | |
]) | |
} | |
} | |
} | |
} | |
// Génère le CSV de sortie | |
var csvOut = Papa.unparse(outData, { | |
delimiter: ';' | |
}) | |
document.getElementById(textareaOut).value = csvOut | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment