mojaSymfonia FORUM
https://forum.mix-soft.pl/

AmBasic Odczyt z pliku CSV
https://forum.mix-soft.pl/viewtopic.php?f=15&t=5210
Strona 1 z 1

Autor:  FAQ [ 2013-10-10, 16:56 ]
Tytuł:  AmBasic Odczyt z pliku CSV

Jak odczytać dane z pliku CSV?. Separatorem pliku jest przecinek. Ogranicznikiem tekstu jest znak "

Autor:  FAQ [ 2013-11-15, 19:16 ]
Tytuł:  Re: AmBasic Odczyt z pliku CSV

Przykład danych do odczytu

Kod:
"nazwa","limitkwota","plattyp","kod","miejscowosc","limiti"
"Agora Gazeta",1000.00,255,"Agora","Warszawa",1
"Auto SALEon s.c.",0.00,255,"Auto SALEon s.c.","Szczecin",0
"Bank PKO SA",0.00,255,"Bank PKO SA","Warszawa",0
"Edelweiss SA",0.00,255,"Edelw Zwierzyniec","Krasnystaw",0
"Edelweiss SA Oddział Zwierzyniec",0.00,131,"Edelweiss SA","Zwierzyniec",0
"Herr Flueck KG",0.00,255,"Herr Flueck KG","Hannover",0
"Kornel Kobza i ska",0.00,255,"Kornel Kobza","Radom",0
"Kornex sp. z o.o.",15000.00,130,"Kornex sp. z o.o.","Zamość",1
"MATRIX.PL SA",0.00,255,"MATRIX","Warszawa",0
"Nowak Jan",0.00,130,"Nowak Jan","Kraków",0
"TP SA",0.00,255,"TP SA","Lublin",0


Do wyodrębnienia danych użyj obiektu

Kod:
   dispatch exp = "VBScript.RegExp"
   dispatch mat
   exp.Global = 1
   exp.IgnoreCase = 1
   exp.pattern= "([^,\"]+|\"([^\"]|\"\")*\"|,,)"

   string sLinia
   int i

   int iCSV = open "c:\\temp\\dane.csv" for input   

      while (Input #iCSV,sLinia)
   
         mat = exp.Execute( sLinia  )
      
         for i = 0 to i>mat.Count()-1
               print using "Kolumna : %d Wartość : %s" + lf, i, mat.item(i).value,lf
         next i
          
      wend
   
   Close(iCSV)


Wynik działania

Załącznik:
hmcsv03.jpg
hmcsv03.jpg [ 130.58 KiB | Przeglądany 4340 razy ]

Autor:  tomas [ 2017-01-16, 11:25 ]
Tytuł:  Re: AmBasic Odczyt z pliku CSV

Dlaczego tekst zwracany jest ze znakami " ?

Autor:  marty123 [ 2018-04-19, 10:39 ]
Tytuł:  Re: AmBasic Odczyt z pliku CSV

Sprawdziłem ten raport i działa całkiem sprawnie, pojawia się tylko problem w sytuacji gdy dwie kolejne kolumny są puste, wtedy mam w pliku trzy przecinki obok siebie i liczba kolumn wartości nie zgadza się z liczbą kolumn nagłówka.

Na razie wymyśliłem dwa szybkie rozwiązania,
1.żeby wszystkie kolumny miały jakąś wartość, ale to nie jest najbradziej optymalne rozwiązanie.
2.to chyba lepsze - żeby polecieć po pliku najpierw i zamienić trzy kolejne przecinki na cztery w każdej linii, wtedy zadziała poprawnie wyrażenie regularne, można to zrobić przed komendą :
Kod:
mat = exp.Execute( sLinia  )

Autor:  szepczący [ 2018-04-19, 11:20 ]
Tytuł:  Re: AmBasic Odczyt z pliku CSV

Tu jest temat o użyciu wyrażeń regularnych (nie obiektem ale wbudowaną zmienną specjalną buf + find regular):
viewtopic.php?f=15&t=8009

Autor:  marty123 [ 2018-04-19, 13:33 ]
Tytuł:  Re: AmBasic Odczyt z pliku CSV

już kombinowałem z różnymi wyrażeniami, ale jest kłopot, żeby rozbić dwa przecinki jako jedną kolumne, a trzy jako dwie kolumny, zostanę przy podmianie trzech przecinków na cztery przed zastosowaniem wyrażenia regularnego.

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/