public Pair <int, List <IAnswer> > ExtractAnswers(ICodebook codebook, DataTable answers, IEnumerable <ColumnInfo> journalInfoColumns) { var results = new List <IAnswer>(); var missingVars = new List <string>(); foreach (DataRow row in answers.Rows) { Answer answer = new Answer(); var variables = new List <IVariable>(); // add journalInfo foreach (var info in journalInfoColumns) { var col = info.Column; var columnType = info.Datatype; var columnWidth = info.ColumnWidth; if (answers.Columns[col] != null) { var value = row[col].ToString(); variables.Add(new CodeAnswer(new Code(0, 0, 0, 0, col, col, "", columnType, col, columnWidth), value)); } } // add answers foreach (var code in codebook.Codes) // read each column in row { if (answers.Columns[code.Name] != null) { var value = row[code.Name].ToString(); IVariable codeAnswer = new CodeAnswer(code, value); variables.Add(codeAnswer); } else { var miss = "Missing var: {0} - survey: {1} row,col,sur,qId: {2},{3},{1},{4} Q:{5}".F(code.Name, codebook.Id, code.Row, code.Column, code.QuestionId, code.QuestionNumber); if (!missingVars.Contains(miss)) { missingVars.Add(miss); } } } answer.Variables = variables; answer.Id = codebook.Id; answer.AnswerMetadata = AnswerMetadata.GetJournalInfo(row); // Key to group by (pid, follow_up) answer.SetKey(answer.AnswerMetadata.Pid, answer.AnswerMetadata.FollowUp); answer.Projekt = answer.AnswerMetadata.Projekt; results.Add(answer); } foreach (var miss in missingVars) { Console.Out.WriteLine(miss); } results = results.OrderBy(r => r.Key).ToList(); return(new Pair <int, List <IAnswer> >(codebook.Id, results)); }
private void AddExportInfo(AnswerMetadata answerMetadata, bool exportedToSpss) { if (!_answerInfoCollection.ContainsKey(answerMetadata.Pid)) { _answerInfoCollection.Add(answerMetadata.Pid, new AnswerInfo(answerMetadata)); } _answerInfoCollection[answerMetadata.Pid].SPSS = exportedToSpss; }
private static IEnumerable <ICode> GetColumnDefinitions(Dictionary <int, ICodebook> codebooks) { var columns = new List <ICode>(); foreach (var columnInfo in AnswerMetadata.JournalInfoColumns()) { var columnName = columnInfo.Column; var columnType = columnInfo.Datatype; var columnWidth = columnInfo.ColumnWidth; var col = new Code(0, 0, 0, 0, "", columnName, "", columnType, "", columnWidth); columns.Add(col); } columns.AddRange(codebooks.Values.SelectMany(cb => cb.Codes)); return(columns); }
private void AddExportInfo(AnswerMetadata answerMetadata, int surveyId) { if (!_answerInfoCollection.ContainsKey(answerMetadata.Pid)) { _answerInfoCollection.Add(answerMetadata.Pid, new AnswerInfo(answerMetadata)); } if (2 == surveyId) { _answerInfoCollection[answerMetadata.Pid].Besvarelsesdato_CBCL = answerMetadata.Besvarelsesdato; } else { _answerInfoCollection[answerMetadata.Pid].Besvarelsesdato_TRF = answerMetadata.Besvarelsesdato; } }
private AnswerMetadata PopulateJournalInfo(DataRow row) { var journalInfo = new AnswerMetadata(); journalInfo.Ssghafd = row["ssghafd"].ToString(); journalInfo.Ssghnavn = row["ssghnavn"].ToString(); journalInfo.Safdnavn = row["safdnavn"].ToString(); journalInfo.Pid = row.ToString("pid"); journalInfo.Projekt = row.ToString("projekt"); journalInfo.Pkoen = (Gender)row.ToInt("pkoen"); journalInfo.Palder = row.ToInt("palder"); journalInfo.Pnation = row.ToString("pnation"); journalInfo.Besvarelsesdato = StringHelperExtensions.ToDate(row["besvarelsesdato"].ToString()); journalInfo.Pfoedt = row["pfoedt"].ToString(); journalInfo.FollowUp = row["follow_up"].ToString(); return(journalInfo); }
public AnswerInfo(AnswerMetadata answerMetadata) { Id = answerMetadata.Id; Pid = answerMetadata.Pid; this.Birthdate = answerMetadata.Pfoedt; this.Pfoedt = answerMetadata.Pfoedt; this.Palder = answerMetadata.Palder; this.Pkoen = answerMetadata.Pkoen; this.Pnation = answerMetadata.Pnation; this.Projekt = answerMetadata.Projekt; this.JournalId = answerMetadata.JournalId; this.Safdnavn = answerMetadata.Safdnavn; this.Ssghafd = answerMetadata.Ssghafd; this.Ssghnavn = answerMetadata.Ssghnavn; this.Besvarelsesdato = answerMetadata.Besvarelsesdato; this.FollowUp = answerMetadata.FollowUp; }
public static IEnumerable <AnswerInfo> GetJournalInfos(DataTable table, int surveyId) { var infos = new List <AnswerInfo>(); foreach (DataRow row in table.Rows) { var answerInfo = new AnswerInfo(AnswerMetadata.GetJournalInfo(row)); if (surveyId == 2) { answerInfo.Besvarelsesdato_CBCL = answerInfo.Besvarelsesdato; } else { answerInfo.Besvarelsesdato_TRF = answerInfo.Besvarelsesdato; } infos.Add(answerInfo); } return(infos); }
private AnswerMetadata ParseRow(XElement row) { var fields = row.Elements("field"); var id = _xmlHelper.GetIntAttributeValue(fields, "id"); var journalId = _xmlHelper.GetIntAttributeValue(fields, "journal_id"); var ssghafd = fields.Single(e => e.HasAttributeValue("ssghafd")).Value; var ssghnavn = fields.Single(e => e.HasAttributeValue("ssghnavn")).Value; var safdnavn = fields.Single(e => e.HasAttributeValue("safdnavn")).Value; var pid = fields.Single(e => e.HasAttributeValue("pid")).Value; var projekt = fields.Single(e => e.HasAttributeValue("projekt")).Value; var pkoen = _xmlHelper.GetAttributeGender(fields, "pkoen"); var palder = _xmlHelper.GetIntAttributeValue(fields, "palder"); var pkoen_datatype = _xmlHelper.GetAttributeDatatype(fields, "pkoen_datatype"); var palder_datatype = _xmlHelper.GetAttributeDatatype(fields, "palder_datatype"); var pnation = _xmlHelper.GetAttributeValue(fields, "pnation"); var pnation_datatype = _xmlHelper.GetAttributeDatatype(fields, "pnation_datatype"); var besvarelsesdato = _xmlHelper.GetAttributeDateTime(fields, "besvarelsesdato"); var pfoedt = _xmlHelper.GetAttributeDateTime(fields, "pfoedt"); var besvarelsesdato_datatype = _xmlHelper.GetAttributeDatatype(fields, "besvarelsesdato_datatype"); var pfoedt_datatype = _xmlHelper.GetAttributeDatatype(fields, "pfoedt_datatype"); var journalInfo = new AnswerMetadata() { Id = id, JournalId = journalId, Ssghafd = ssghafd, Ssghnavn = ssghnavn, Safdnavn = safdnavn, Pid = pid, Projekt = projekt, Pkoen = pkoen, Palder = palder, Pnation = pnation, Pfoedt = pfoedt.ToString(), }; return(journalInfo); }
private void importCsvButton_Click(object sender, EventArgs e) { var dir = FindCodebooks(); if (dir.Contains("not found")) { Log("Error: Codebooks could not be found. Check locations, folder 'Codebooks' must be in current directory."); //throw new ApplicationException("Codebooks could not be found"); } var codebookFiles = new List <String> { @"\codebook_cc.xml", @"\codebook_ccy.xml", @"\codebook_ct.xml", @"\codebook_tt.xml", @"\codebook_ycy.xml" }; var fullFilePaths = codebookFiles.Select(f => dir + f); CodeBookXmlLoader codebookLoader; try { codebookLoader = new CodeBookXmlLoader(fullFilePaths); _codebooks = codebookLoader.Read(); } catch (Exception ex) { Log("Fejl indlæsning kodebøger: " + ex.Message); Log(ex.StackTrace); throw; } Log("Indlæste kodebøger: " + codebookFiles.Aggregate((a, b) => a + ", " + b)); // read answers var answersLoader = new AnswersCsvLoader(); Log("Indlæser svar i CSV-format"); Dictionary <int, DataTable> answers; try { answers = answersLoader.ReadCsvAnswers(_files); } catch (Exception ex) { Log("Fejl indlæsning svar: " + ex.Message); Log(ex.StackTrace); throw; } var answerTables = answers.GroupBy(a => a.Key); foreach (var grouping in answerTables) { var surveyId = grouping.Key; var journalInfos = grouping.SelectMany(group => AnswerInfo.GetJournalInfos(group.Value, surveyId)); foreach (var journalInfo in journalInfos) { AddExportInfo(journalInfo, surveyId); } } var journalInfoColumns = AnswerMetadata.JournalInfoColumns(); var mixer = new CodebookAnswerMixer(_codebooks.Values); var answersPerSurvey = new Dictionary <int, List <IAnswer> >(); Log("Importerer svar..."); int codebookId = 0; try { foreach (var pair in _codebooks) { codebookId = pair.Key; //.ToString(); ICodebook codebook = pair.Value; if (answers.ContainsKey(codebookId)) { var answersTable = answers[codebookId]; // get answer table and codebook with same surveyId. Just for trying out var answersForSurvey = mixer.ExtractAnswers(codebook, answersTable, journalInfoColumns); answersPerSurvey.Add(answersForSurvey.First, answersForSurvey.Second); } } } catch (Exception ex) { Log("Fejl i mix: " + ex.Message); Log("KodebogID: " + codebookId); Log(ex.StackTrace); throw; } try { _importedAnswers = mixer.CollectAnswersByJournal(answersPerSurvey); } catch (Exception ex) { Log("Fejl saml svar: " + ex.Message); Log(ex.StackTrace); throw; } Log("Svarene er importeret."); foreach (var answerBook in _importedAnswers) { foreach (var journalInfo in answerBook.AnswerMetadataList) { AddExportInfo(new AnswerInfo(journalInfo), true); } } importCsvButton.Enabled = false; saveButton.Enabled = true; }