Skip to content

Instantly share code, notes, and snippets.

@GromNaN
Last active January 2, 2018 15:56
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save GromNaN/4d334678520f4014eab59c64c00807d2 to your computer and use it in GitHub Desktop.
CSV conversion
<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>
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