Ciao, devo usare la libreria CsvHelper per produrre con VB.NET un file con la seguente struttura
Titolo Gruppoa,b,c,d,e,f1,2,3,4,5,6
Titolo Gruppo 2a.b.c.d.e.f1,2,3,4,5,6
Come powwo fare?Grazie,Simone
Non hai la documentazione di quella libreria?
Si, ma non ho trovato come scrivere i gruppi.
E 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
Examples | CsvHelper (joshclose.github.io)
30/12/2022 - sspagnamn76 ha scritto:Ciao, devo usare la libreria CsvHelper per produrre con VB.NET un file con la seguente struttura […]
30/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.
Ciao,
questo ad esempio lo devo salvare il csv
e 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
30/12/2022 - sspagnamn76 ha scritto:questo ad esempio lo devo salvare il csv […]
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?
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.
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
30/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.
Spostato nell'area vb.net
Grazie per la segnalazione.
Sostanzialmente devo raggruppare in unco csv più classifiche calcistice per le quali ho :
Ciascuna tablla è separata da una linea vuota.Con il wrapper manuale ci sono riuscito mentre con CsvHelper no.per questo vi sto chiedendo.Grazie,S
CsvHelper non è la libreria adatta, chiaro?
30/12/2022 - sspagnamn76 ha scritto:Con il wrapper manuale ci sono riuscito mentre con CsvHelper no.
Con il wrapper manuale ci sono riuscito mentre con CsvHelper no.
Che codice hai scritto sino ad ora?
Vediamolo e ragioniamoci sopra.
Come 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
For Each standing In standings Dim groups = standing.Groups For Each group In groups