Utilizzo della libreria CsvHelper in VB.NET

di il
18 risposte

Utilizzo della libreria CsvHelper in VB.NET

Ciao, devo usare la libreria CsvHelper per produrre con VB.NET un file con la seguente struttura

Titolo Gruppo
a,b,c,d,e,f
1,2,3,4,5,6

Titolo Gruppo 2
a.b.c.d.e.f
1,2,3,4,5,6

Come powwo fare?
Grazie,
Simone

18 Risposte

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    Non hai la documentazione di quella libreria?

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    Si, ma non ho trovato come scrivere i gruppi.

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    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

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    Examples | CsvHelper (joshclose.github.io)

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    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.

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    Ciao,

    questo ad esempio lo devo salvare il csv

    e viene :

    CALCO,,,,
    Nome 1,Nome 2,1,x,2
    Alfa,Manna,,x,
    Beta ,Nanna,x,,x
    Gamma,Ianna,,x,
    ,,,,
    ,,,,
    ,,,,
    TENNIS,,,,
    Nome 1,Nome 2,1,x,2
    Alfa,Manna,x,x,
    Beta ,Nanna,x,,x
    Gamma,Ianna,,x,

    Grazie.
    Simone

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    30/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?

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    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

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    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.

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    Spostato nell'area vb.net

    Grazie per la segnalazione.

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    Sostanzialmente devo raggruppare in unco csv più classifiche calcistice per le quali ho :

    • Titolo
    • Header della tabella
    • Tabella

    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

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    CsvHelper non è la libreria adatta, chiaro?

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    30/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.

  • Re: Utilizzo della libreria CsvHelper in VB.NET

    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 

     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

Devi accedere o registrarti per scrivere nel forum
18 risposte