Autor Téma: Umazaní textu z CSV souboru za středníkem  (Přečteno 255 krát)

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 269
  • Karma: 1
    • Verze Delphi: Delphi 7
Umazaní textu z CSV souboru za středníkem
« kdy: 17-05-2019, 09:47:41 »
Ahoj,
potřeboval bych pomoct...

Mám CSV soubor který má několik řádku a každý řádek obsahuje podobný text

císlo;text;neco;neco

Kód: Delphi [Vybrat]
  1. 6939554937545;IP Camera Alhua IPC-HDBW1230E-;0,00;0,00;

a potřeboval bych aby za vše za prvním středníkem smazalo, včetně středníku a zustalo pouze číslo
Jen doplnim ze to číslo má vždy 13 znaku, je to EAN13

a pokud by byla možnost hned tyto čárové kody vytisknout na A4 samolepící bloky, tak by to byl uplně jen bonus :)
« Poslední změna: 17-05-2019, 09:54:48 od Kony »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #1 kdy: 17-05-2019, 10:18:57 »
Otvorím si súbor a načítam si jeho obsah do TStringList. Každý riadok jeden Item. Prechádzam jednotlivé položky TStringList pričom si načítam ich obsah/text a použijem funkciu Copy(). S výsledkom si rob čo chceš.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 141
  • Karma: 8
    • Verze Delphi: XE2
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #2 kdy: 17-05-2019, 10:22:40 »
Pokud to bude stačit jen rámcově
1. Nakopirovat CSV  do například stringlistu  (ListBox.items)
2. v cyklu For In procházet items
3. PomText:= Copy(items,1,13)
4. Proměnnou PomText zpracovat někam uložit (memory table, stringlist, array )
5. Poslat přes FastReport  (nebo přímý tisk na canvas tiskárny)

Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 269
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #3 kdy: 17-05-2019, 10:57:45 »
Tak zkusim

Kód: Delphi [Vybrat]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   PomText : String;
  4. begin
  5.   listbox1.Items.LoadFromFile('c:\xxx\EAN.csv');
  6.   PomText:= Copy(ListBox1.Items.Text,1,13);
  7.   Memo1.Text := PomText;
  8. end;



takto to nejde, nebo spis jde ale vytvori pouze jeden radek


další pokus :
Kód: Delphi [Vybrat]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   PomText : String;
  4.   i: Integer;
  5. begin
  6.   listbox1.Items.LoadFromFile('c:\Trell\EAN.csv');
  7.   For i := 0 To ListBox1.Items.Count do
  8.       PomText:= Copy(ListBox1.Items.Text,1,13);
  9.       Memo1.Text := PomText;
  10. end;
Stale to udělá pouze první řádek
« Poslední změna: 17-05-2019, 11:24:19 od Kony »

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 141
  • Karma: 8
    • Verze Delphi: XE2
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #4 kdy: 17-05-2019, 11:25:32 »
Přepisuji z hlavy, takže možná syntaktická chybka ..

procedure TForm1.Button1Click(Sender: TObject);
var
  PomText : String;
  i,ct : Integer;
begin
  listbox1.Items.LoadFromFile('c:\Trell\EAN.csv');

  For i := 0 to listbox1.Items.Count-1 do
   begin
      PomText:= Copy(ListBox1.Items(i),1,13);
      Memo1.lines.add(PomText);
   end;

Důležité : ListBox1.Items(i);   zde použij hranaté závorky   - editor mi to transformuje




Offline Kony

  • Hrdina
  • ****
  • Příspěvků: 269
  • Karma: 1
    • Verze Delphi: Delphi 7
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #5 kdy: 17-05-2019, 11:29:48 »
SUPER, bezi to jak ma

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 141
  • Karma: 8
    • Verze Delphi: XE2
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #6 kdy: 17-05-2019, 11:37:21 »
SUPER, bezi to jak ma

Pokud je toho  CSV  hodně doplň ještě  toto


 ListBox1.Items.BeginUpdate;
 Memo1.Lines.BeginUpdate;
 try
  ---  tvuj kod
  finally
 ListBox1.Items.EndUpdate;
 Memo1.Lines.EndUpdate;
  end;


Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2312
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #7 kdy: 17-05-2019, 12:25:55 »
Důležité : ListBox1.Items(i);   zde použij hranaté závorky   - editor mi to transformuje

Proto je tu tag code, v toolbaru oznacen #

Kód: Delphi [Vybrat]
  1. ListBox1.Items[i];

Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2579
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #8 kdy: 17-05-2019, 13:40:55 »
SUPER, bezi to jak ma
Jenom bych pripomel, ze puvodni dotaz znel na CSV a text do 1. stredniku a ne vykopirovat 1. 13 znaku z kazdeho radku.
To jednak neresi problem a dvak je to zavrzenihodna technika.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #9 kdy: 17-05-2019, 14:15:37 »
Správne má vyhľadať výskyt prvej bodkočiarky. A túto hodnotu použiť v Copy, namiesto magického čísla 13. Predpokladal som, že to tak urobí.
Citace
To jednak neresi problem a dvak je to zavrzenihodna technika
Môžeš tie dve veci krátko vysvetliť?
Edit: Aha už jednu chybu vidím. Napĺňanie Memo textom!
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2579
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #10 kdy: 17-05-2019, 15:49:33 »
Správne má vyhľadať výskyt prvej bodkočiarky. A túto hodnotu použiť v Copy, namiesto magického čísla 13. Predpokladal som, že to tak urobí.
Citace
To jednak neresi problem a dvak je to zavrzenihodna technika
Môžeš tie dve veci krátko vysvetliť?
Edit: Aha už jednu chybu vidím. Napĺňanie Memo textom!
Ne, tyka se to jen a jen zadani:
1. CSV format nema definovanou sirkou pole - proto ma ty oddelovace, navic oddelovac muze byt soucasti textu polozky, takze spravne univerzalni reseni je parsovat CSV a vzit hodnotu 1. polozky na radku. A kdyz se to jednou napise, uz se to da pouzit na CSV s jakymkoli obsahem.
2. Vykopirovat natvrdo 13 znaku je IMHO prasacka technika, ktera by se snad nemela pouzivat ani v nejakych jednorazovych Q&D matlaninach, kdy programatorovi nekdo drzi u hlavy revolver :-)

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 141
  • Karma: 8
    • Verze Delphi: XE2
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #11 kdy: 17-05-2019, 22:35:05 »
Proto je tu tag code, v toolbaru oznacen #

Pravda pravdoucí , vůbec jsem si to neuvědomil, snad to přístě bude lepší  .
Díky 

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 141
  • Karma: 8
    • Verze Delphi: XE2
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #12 kdy: 17-05-2019, 22:42:55 »
2. Vykopirovat natvrdo 13 znaku je IMHO prasacka technika, ktera by se snad nemela pouzivat ani v nejakych jednorazovych Q&D matlaninach, kdy programatorovi nekdo drzi u hlavy revolver :-)
Nějak nemohu pochopit co je zavrženíhodného  na použití funkce Copy, zejména pokud mi to přinese jednodušší kod pro zápis i pochopení - v rámci původního požadavku
Například pokud bych potřeboval jen prvních 7 znaků  tak mi parsování zrovna moc nepomůže. To bych použil pokud bych celý CSV potřeboval převést a pracovat kompletně (například do tabulky) 


Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 741
  • Karma: 42
    • Verze Delphi: 10.3
Re:Umazaní textu z CSV souboru za středníkem
« Odpověď #13 kdy: 17-05-2019, 23:38:57 »
Excellent
Rated 1 time
Nějak nemohu pochopit co je zavrženíhodného  na použití funkce Copy, zejména pokud mi to přinese jednodušší kod pro zápis i pochopení - v rámci původního požadavku

IMHO správnější je najít pozici středníku a pak pomocí Copy vzít to, co je před ním. Je to univerzálnější - bude to fungovat správně i v případě, že časem narazí na soubor, kde číslo kamery bude kratší nebo delší než těch 13 znaků. Za správnější to považuji proto, že vstup je soubor s oddělovači, nikoliv soubor, kde by jednotlivé údaje měly pevně definovanou délku, a proto bych k němu taky tak přistupoval a nespoléhal se na to, že zrovna ten začátek můžu takhle očůrat a ono to asi projde.