Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 07:45Ciao, devo usare la libreria CsvHelper per produrre con VB.NET un file con la seguente strutturaTitolo Gruppoa,b,c,d,e,f1,2,3,4,5,6Titolo Gruppo 2a.b.c.d.e.f1,2,3,4,5,6Come powwo fare?Grazie,Simone
OoregonSuper FamosoIscritto danov, 2011Messaggi2191730 dic 2022, 08:27Non hai la documentazione di quella libreria?
Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 08:38Si, ma non ho trovato come scrivere i gruppi.
OoregonSuper FamosoIscritto danov, 2011Messaggi2191730 dic 2022, 09:03E dove sarebbe questa documentazione?E poi perché devi usare quella libreria che gestirà file csv standard e basta?Il file che vuoi tu non è un csv, ti devi arrangiare col codice gestendo da solo
Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 09:13Examples | CsvHelper (joshclose.github.io)
AlkaUtente FamosoIscritto danov, 2014Messaggi350430 dic 2022, 10:0030/12/2022 - sspagnamn76 ha scritto:Ciao, devo usare la libreria CsvHelper per produrre con VB.NET un file con la seguente struttura […]Non puoi usare CsvHelper, perché quella libreria genera file in formato CSV ma… il tuo non è un file CSV.Non è che basta mettere una virgola in un file di testo per poter dire che si tratti di un CSV: il formato del file deve rispettare delle regole precise, e se il contenuto devia da queste regole, allora si tratta di un'altra cosa. :)Per scrivere un file di testo custom, puoi usare le funzioni di StreamWriter, oppure uno StringBuilder se vuoi generare il testo in memoria, prima di salvarlo. Usando la struttura dati di appoggio che dovresti aver creato, scrivi valore per valore, inserendo il separatore e i ritorni a capo per produrre il testo nel formato che ti serve.
Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 10:46Ciao,questo ad esempio lo devo salvare il csve viene :CALCO,,,,Nome 1,Nome 2,1,x,2Alfa,Manna,,x,Beta ,Nanna,x,,xGamma,Ianna,,x,,,,,,,,,,,,,TENNIS,,,,Nome 1,Nome 2,1,x,2Alfa,Manna,x,x,Beta ,Nanna,x,,xGamma,Ianna,,x,Grazie.Simone
AlkaUtente FamosoIscritto danov, 2014Messaggi350430 dic 2022, 11:1230/12/2022 - sspagnamn76 ha scritto:questo ad esempio lo devo salvare il csv […]Come puoi vedere, il formato usato da Excel non è esattamente quello che hai indicato tu: nel record i campi ci sono tutti e sono presenti dei valori vuoti laddove non è possibile indicarne uno, questo per mantenere lo stesso numero di campi per ciascun record come richiede espressamente il formato CSV.Detto questo, non è chiara qual è la tua domanda: dobbiamo scrivere tutto il codice?Se l'esportazione fatta da Excel è quella che vuoi perseguire, allora puoi usare CsvHelper, ma i tuoi dati dove sono memorizzati?Come hai organizzato in memoria le strutture e gli oggetti che contengono le stesse informazioni che vediamo nella schermata di Excel?Hai provato a seguire uno degli esempi della documentazione, tipo questo, travasando i dati dalla tua struttura eventuale a un oggetto che rappresenti il “record tipico” del tuo CSV?
Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 11:21Vorrei solo qualche indicazione puntuale per non fare giri pindarici.Al momento ho scritto io una libreria che genera il csv, ma vorrei conformarmi a CsvHelper.Ecco un pò di codice per contestualizzare : Public Sub WriteCsv(currentStandings As SoccerStandings, seasonCode As String) Dim csv = New StringBuilder() Dim standings = currentStandings.Standings For Each standing In standings Dim groups = standing.Groups For Each group In groups Dim title As String = group.Name csv.AppendLine(title) Const colummsName = "rank,team,mp,w,d,l,g,pts" csv.AppendLine(colummsName) Dim tableRows = New List(Of SoccerStandingsTableRow)() For Each groupStanding In group.Standings Dim row = New SoccerStandingsTableRow() With { .Rank = groupStanding.Rank, .Team = groupStanding.Competitor.Name, .Mp = groupStanding.Played, .W = groupStanding.Win, .D = groupStanding.Draw, .L = groupStanding.Loss, .G = $"{groupStanding.GoalsAgainst}:{groupStanding.GoalsFor}", .Pts = groupStanding.Points } tableRows.Add(row) Next tableRows = tableRows.OrderBy(Function(row) row.Rank).ToList() csv.AppendLine(ExportToCsvExtension.AsCsvWriteTableContent(tableRows)) Next Next Dim fileName As String = $"{Context.CsvTempDir}\\{DateTime.Now.ToShortDateString()}_{seasonCode}_{ _ Sports.SportsAttributeAssociations(Sports.SportType.SOCCER).CsvFileName}" Dim file = New StreamWriter(fileName) file.WriteLine(csv.ToString()) End Sub
AlkaUtente FamosoIscritto danov, 2014Messaggi350430 dic 2022, 11:2730/12/2022 - sspagnamn76 ha scritto:Vorrei solo qualche indicazione puntuale per non fare giri pindarici.Al momento ho scritto io una libreria che genera il csv, ma vorrei conformarmi a CsvHelper.[…]Mi sta bene quel che dici, ma per non costringere a “giri pindarici” anche noi, dovresti appunto contestualizzare qual è il problema che riscontri con CsvHelper, o cosa non ti è chiaro.Come è stato già detto, studia un attimo gli esempi della documentazione per capire a grandi linee come è possibile fornire al tool le informazioni necessarie a scrivere i dati dentro al file CSV, e in caso di intoppo spiega qual è il dubbio, il problema o l'errore specifico.In caso contrario, non è che si possa dire molto altro.
TokiModeratoreIscritto dagen, 2001Messaggi389730 dic 2022, 11:42Spostato nell'area vb.netGrazie per la segnalazione.
Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 12:04Sostanzialmente devo raggruppare in unco csv più classifiche calcistice per le quali ho :TitoloHeader della tabellaTabellaCiascuna tablla è separata da una linea vuota.Con il wrapper manuale ci sono riuscito mentre con CsvHelper no.per questo vi sto chiedendo.Grazie,S
OoregonSuper FamosoIscritto danov, 2011Messaggi2191730 dic 2022, 12:31CsvHelper non è la libreria adatta, chiaro?
AlkaUtente FamosoIscritto danov, 2014Messaggi350430 dic 2022, 12:4830/12/2022 - sspagnamn76 ha scritto:Con il wrapper manuale ci sono riuscito mentre con CsvHelper no.Che codice hai scritto sino ad ora?Vediamolo e ragioniamoci sopra.
Ssspagnamn76Pochi postsIscritto dadic, 2022Messaggi2930 dic 2022, 13:34Come da tua richiesta eccoti un pò di codice.Fammi sapere.Grazie.Simone– Codice Consumer Public Sub ComposeCsvFile(currentSport As Sports.SportType, seasonCode As String) If String.IsNullOrEmpty(_callResult) Then Logger.Current.WriteLog(LogType.Error, NameOf(BrBookEngine), $"Error WebApi result is empty for {currentSport}") Return End If Select Case currentSport Case Sports.SportType.SOCCER Dim soccerStandings As SoccerStandings = _soccerService.FillModel(_callResult) _soccerService.WriteCsv(soccerStandings, seasonCode) Case Else Logger.Current.WriteLog(LogType.Error, NameOf(BrBookEngine), $"Sport Standings for {currentSport} are not managed") End Select End Sub– Classe Helper Public Sub WriteCsv(currentStandings As SoccerStandings, seasonCode As String) Dim csv = New StringBuilder() Dim standings = currentStandings.Standings For Each standing In standings Dim groups = standing.Groups For Each group In groups Dim title As String = group.Name csv.AppendLine(title) Const colummsName = "rank,team,mp,w,d,l,g,pts" csv.AppendLine(colummsName) Dim tableRows = New List(Of SoccerStandingsTableRow)() For Each groupStanding In group.Standings Dim row = New SoccerStandingsTableRow() With { .Rank = groupStanding.Rank, .Team = groupStanding.Competitor.Name, .Mp = groupStanding.Played, .W = groupStanding.Win, .D = groupStanding.Draw, .L = groupStanding.Loss, .G = $"{groupStanding.GoalsAgainst}:{groupStanding.GoalsFor}", .Pts = groupStanding.Points } tableRows.Add(row) Next tableRows = tableRows.OrderBy(Function(row) row.Rank).ToList() csv.AppendLine(ExportToCsvExtension.AsCsvWriteTableContent(tableRows)) Next Next Dim fileName As String = $"{Context.CsvTempDir}\\{DateTime.Now.ToShortDateString()}_{seasonCode}_{ _ Sports.SportsAttributeAssociations(Sports.SportType.SOCCER).CsvFileName}" Dim file = New StreamWriter(fileName) file.WriteLine(csv.ToString()) End Sub